调整只写主 mysql 数据库
Tuning an write-only master mysql database
当我只运行 编写查询(插入、删除、更新)时,我有一个主数据库。
我想知道如何调整这个,因为选择在这里并不重要。
我正在使用 InnoDB。具有 1 个主站和 2 个从站的复制。 运行 在 Ubuntu 16.04 服务器上。 MySQL5.6
禁用 query cache。只对阅读有用
禁用adaptive hash index。只对阅读有用
增加innodb_log_file_size。我建议至少 2GB,除非磁盘 space 很短。
删除索引,UPDATE
/DELETE
语句使用的索引除外。您可以在从站上创建更多索引以支持 SELECT
查询。
考虑 fine-tuning the Buffer Pool Flushing。最佳设置取决于您的工作量,因此您必须进行试验。
如果想牺牲耐久度,可以做一些其他的改动。警告:这些会增加数据丢失的风险。
innodb_flush_log_at_trx_commit = 2 或 0 以放宽同步日志写入。
innodb_doublewrite = 关闭以禁用页面写保护。
sync_binlog = 0 禁用同步写入二进制日志。
确保您的数据目录位于快速磁盘上,例如 SSD 或缓存 RAID 阵列。
永远不要使用 NFS。
您可以尝试将 innodb_log_group_home_dir and innodb_undo_directory and log_bin_basename and tmpdir 放在数据目录中的不同物理卷上。但除非性能确实受磁盘限制,否则这不会带来好处。
进一步调整取决于您的工作量。比如改变线程并发数或者IO写线程数或者IO容量。如果您想进行这种级别的调整,请咨询专业人士。
@spencer7593 的评论提出了一个很好的观点,您可能无法仅使用数据库调整选项来实现最佳优化。
您没有提到有关应用程序或写入类型的任何内容,但最终您将不得不考虑更改写入数据库的方式。单独调整更改在提高数据库性能方面是有限的。
例如,应用程序可以写入队列,然后创建消费者应用程序以使用队列中的项目并将数据批量写入数据库。这意味着更高效的数据库写入,但更重要的是,它允许应用程序 "write" 具有更低的延迟,因为它们只写入队列。
最终,您可能会发现没有任何一个数据库实例可以跟上写入的速度。到那时,您将不得不通过将写入分散到多个数据库实例来进行横向扩展。这就是所谓的"sharding"数据。当然这增加了数据库读取的复杂性,因为你的数据不是全部在一起的。因此,在求助于分片之前尝试所有可以尝试的调整更改。
当我只运行 编写查询(插入、删除、更新)时,我有一个主数据库。
我想知道如何调整这个,因为选择在这里并不重要。
我正在使用 InnoDB。具有 1 个主站和 2 个从站的复制。 运行 在 Ubuntu 16.04 服务器上。 MySQL5.6
禁用 query cache。只对阅读有用
禁用adaptive hash index。只对阅读有用
增加innodb_log_file_size。我建议至少 2GB,除非磁盘 space 很短。
删除索引,
UPDATE
/DELETE
语句使用的索引除外。您可以在从站上创建更多索引以支持SELECT
查询。考虑 fine-tuning the Buffer Pool Flushing。最佳设置取决于您的工作量,因此您必须进行试验。
如果想牺牲耐久度,可以做一些其他的改动。警告:这些会增加数据丢失的风险。
innodb_flush_log_at_trx_commit = 2 或 0 以放宽同步日志写入。
innodb_doublewrite = 关闭以禁用页面写保护。
sync_binlog = 0 禁用同步写入二进制日志。
确保您的数据目录位于快速磁盘上,例如 SSD 或缓存 RAID 阵列。
永远不要使用 NFS。
您可以尝试将 innodb_log_group_home_dir and innodb_undo_directory and log_bin_basename and tmpdir 放在数据目录中的不同物理卷上。但除非性能确实受磁盘限制,否则这不会带来好处。
进一步调整取决于您的工作量。比如改变线程并发数或者IO写线程数或者IO容量。如果您想进行这种级别的调整,请咨询专业人士。
@spencer7593 的评论提出了一个很好的观点,您可能无法仅使用数据库调整选项来实现最佳优化。
您没有提到有关应用程序或写入类型的任何内容,但最终您将不得不考虑更改写入数据库的方式。单独调整更改在提高数据库性能方面是有限的。
例如,应用程序可以写入队列,然后创建消费者应用程序以使用队列中的项目并将数据批量写入数据库。这意味着更高效的数据库写入,但更重要的是,它允许应用程序 "write" 具有更低的延迟,因为它们只写入队列。
最终,您可能会发现没有任何一个数据库实例可以跟上写入的速度。到那时,您将不得不通过将写入分散到多个数据库实例来进行横向扩展。这就是所谓的"sharding"数据。当然这增加了数据库读取的复杂性,因为你的数据不是全部在一起的。因此,在求助于分片之前尝试所有可以尝试的调整更改。