【问题标题】:Is tuning the innodb_buffer_pool_size important on Solaris ZFS?在 Solaris ZFS 上调整 innodb_buffer_pool_size 重要吗?
【发布时间】:2011-03-29 16:11:40
【问题描述】:

我们在一个相当大的服务器(2 个四核 Xeon、24GB RAM、2.5" 10k RAID10 磁盘)上运行一个中等大小 (350GB) 的数据库,其中包含一些相当大的表(几亿行,50GB) ),并且得到了一些相当慢的插入(例如,单行的简单插入需要 90 秒!)。

我们的 innodb_buffer_pool_size 设置为 400MB,这对于这种设置来说通常太低了。但是,我们的托管服务提供商建议在 ZFS 上运行时这无关紧要。他说的对吗?

(对于https://dba.stackexchange.com/questions/1975/is-tuning-the-innodb-buffer-pool-size-important-on-solaris-zfs 上的双重帖子表示歉意,但我不确定那里的观众有多大!)

【问题讨论】:

标签: mysql solaris innodb zfs


【解决方案1】:

您的托管服务提供商不正确。在 ZFS 上运行 MySQL 时,您应该对各种不同的东西进行不同的调整,但减少 innodb_buffer_pool_size 并不是其中之一。我写了一篇关于运行MySQL on ZFS 的文章,并在不久前给了lecture。特别是关于innodb_buffer_pool_size,您应该将其设置为在任何其他文件系统上合理的值,并且因为 O_DIRECT 并不意味着在 ZFS 上“不缓存”,您应该在 ZFS 文件上设置 primarycache=metadata包含您的datadir 的系统。您可以在文章和讲座幻灯片中找到其他优化。

【讨论】:

    【解决方案2】:

    我仍然会将 innodb_buffer_pool_size 设置为远高于 400M。原因? InnoDB Buffer Pool 仍然会缓存您经常访问的表所需的数据和索引页。

    运行此查询以获取推荐的 innodb_buffer_pool_size (MB):

    SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw3,0,pw)))+0.49999),SUBSTR('KMG',IF(pw3,0,pw))+1,1)) 推荐_innodb_buffer_pool_size FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables WHERE engine='InnoDB') A,(SELECT 2 pw) B;

    只需使用此查询的结果或 80% 的已安装 RAM(在您的情况下为 19660M),以较小者为准。

    我还将 innodb_log_file_size 设置为 InnoDB 缓冲池大小的 25%。不幸的是,innodb_log_file_size 的最大值是 2047M。 (1M 小于 2G)因此,将 innodb_log_file_size 设置为 2047M,因为我推荐设置的 innodb_buffer_pool_size 的 25% 是 4915M。

    另一个建议是disable ACID compliance。对 innodb_flush_log_at_trx_commit 使用 0 或 2(默认为 1,支持 ACID 合规性)这将产生更快的 InnoDB 写入有风险在发生崩溃时丢失多达 1 秒的事务。 p>

    【讨论】:

      【解决方案3】:

      如果您还没有读过slow-mysql-inserts,可能值得一读。还 this link 到 mysql 文档关于此事 - 特别是关于考虑事务,如果你正在对一个大表进行多次插入。

      更相关的是this mysql article on performance of innodb and zfs,它专门考虑了缓冲池的大小。

      标题结论是;

      对于 InnoDB,ZFS 性能曲线提出了“将缓冲池大小设置为低,让 ZFS 处理数据缓冲”的新策略。

      您可能希望添加更多细节,例如表上索引的数量/复杂性 - 这显然会产生很大的不同。

      抱歉,这是相当笼统的建议,而不是来自个人经验,我没有愤怒地运行 zfs,但希望其中一些链接可能有用。

      【讨论】:

      • oracle官方建议在mysql数据集上禁用ZFS ARC,让InnoDB处理缓存
      猜你喜欢
      • 2018-04-12
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      相关资源
      最近更新 更多