(在 stackoverflow 上询问但被建议移到这里!)
我对 InnoDB 用法有些困惑 - 我们有一个基于 drupal 的数据库(5:1 读写)在 mysql 上运行(服务器版本:5.1.41-3ubuntu12.10-log (Ubuntu))。我们当前的 Innodb 数据/索引大小为:
当前 InnoDB 索引空间 = 196 M 当前 InnoDB 数据空间 = 475 M
在网上查找并阅读类似“高性能 SQL”之类的书籍建议将数据大小增加 10% - 我已将缓冲池设置为(数据 + 索引)+10%,并注意到缓冲池为 100%......即使将其增加到 896Mb 仍然会使其达到 100%(即使数据 + 索引只有 ~671Mb?
我已将 mysqlreport 的 innodb 部分的输出附加到下方。1 个空闲页面似乎也表明存在一个重大问题。innodb_flush_method 设置为其默认值 - 我将研究将其设置为 O_DIRECT,但想先解决此问题。
__ InnoDB Buffer Pool __________________________________________________
Usage 895.98M of 896.00M %Used: 100.00
Read hit 100.00%
Pages
Free 1 %Total: 0.00
Data 55.96k 97.59 %Drty: 0.01
Misc 1383 2.41
Latched 0 0.00
Reads 405.96M 1.2k/s
From file 15.60k 0.0/s 0.00
Ahead Rnd 211 0.0/s
Ahead Sql 1028 0.0/s
Writes 29.10M 87.3/s
Flushes 597.58k 1.8/s
Wait Free 0 0/s
__ InnoDB Lock _________________________________________________________
Waits 66 0.0/s
Current 0
Time acquiring
Total 3890 ms
Average 58 ms
Max 3377 ms
__ InnoDB Data, Pages, Rows ____________________________________________
Data
Reads 21.51k 0.1/s
Writes 666.48k 2.0/s
fsync 324.11k 1.0/s
Pending
Reads 0
Writes 0
fsync 0
Pages
Created 84.16k 0.3/s
Read 59.35k 0.2/s
Written 597.58k 1.8/s
Rows
Deleted 19.13k 0.1/s
Inserted 6.13M 18.4/s
Read 196.84M 590.6/s
Updated 139.69k 0.4/s
如能得到任何帮助我将非常感激。
谢谢!
答案1
您的 InnoDB 日志文件(ib_logfile0 和 ib_logfile1)的大小是否正确?
它们应该是 InnoDB 缓冲池的 25%
在你的情况下,那将是 224M
您可以按如下方式进行操作:
- 将此设置添加到 /etc/my.cnf :innodb_log_file_size=224M
- 服务 mysql 停止
- rm -f /var/lib/mysql/ib_logfile[01]
- service mysql start(ib_logfile0 和 ib_logfile1 已重新创建)
你应该保留默认设置innodb_flush_method以确保符合 ACID 要求。否则,您可能会丢失最多一秒钟的交易。
警告:如果你的数据库服务器只用于数据库,那么你应该储备 75-80%或 innodb_buffer_pool 的 RAM。
更新
您肯定会想要更改您的 InnoDB 布局!!!!
您需要将 innodb_open_files 提高到 6000
您需要打开 innodb_file_per_table
您需要重组所有 InnoDB 数据,使其位于单独的表空间中