Mysql InnoDB优化

Mysql InnoDB优化

(在 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

您可以按如下方式进行操作:

  1. 将此设置添加到 /etc/my.cnf :innodb_log_file_size=224M
  2. 服务 mysql 停止
  3. rm -f /var/lib/mysql/ib_logfile[01]
  4. 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 数据,使其位于单独的表空间中

相关内容