Mysql InnoDB优化

(在stackoverflow问,但build议搬到这里!)

我在理解InnoDB使用方面遇到了一些麻烦 – 我们有一个运行在mysql(服务器版本:5.1.41-3ubuntu12.10-log(Ubuntu))上的基于drupal的数据库(5:​​1 read:write)。 我们目前的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 

任何帮助,这将是非常赞赏。

谢谢!

InnoDB日志文件(ib_logfile0和ib_logfile1)的大小是否正确?

它们应该是InnoDB缓冲池的25%
在你的情况下,这将是224M

你可以把它们如下:

  1. 将此设置添加到/etc/my.cnf:innodb_log_file_size = 224M
  2. 服务mysql停止
  3. rm -f / var / lib / mysql / ib_logfile [01]
  4. 服务mysql启动(ib_logfile0和ib_logfile1被重新创build)

您应该保持innodb_flush_method的默认值,以确保符合ACID。 否则,您可能会损失高达一秒钟的交易。

CAVEAT:如果您的数据库服务器专用于数据库,则应为innodb_buffer_pool 保留75-80%或RAM。

UPDATE

你一定会想改变你的InnoDB布局!

你需要将innodb_open_files提高到6000
你需要打开innodb_file_per_table
您需要重新构build所有InnoDB数据以驻留在单独的表空间中