我有一个写密集型的网络应用程序,我买了一个 768M RAM 的 VDS
- 这个 my.cnf 适合我的目的吗?
我将 bulk_insert_buffer_size 指定为 126M 和一些其他参数如下:
[mysqld]
bulk_insert_buffer_size=126M
set-variable = max_connections=500
safe-show-database
max_user_connections=200
key_buffer_size = 16M
query_cache_size = 50M
tmp_table_size = 50M
max_heap_table_size = 200M
thread_cache_size = 4
table_cache = 80
thread_concurrency = 8
innodb_buffer_pool_size = 100M
innodb_log_file_size = 25M
query_cache_limit = 50M
innodb_flush_log_at_trx_commit = 2
这取决于 MySQL 数据量和您使用的存储引擎
说到 MyISAM 和 InnoDB,它们的缓存方式不同。我在 2011 年 4 月 14 日写了一篇关于此的帖子。
由于您的机器只有 768M 的 RAM,因此您必须根据您使用最多的存储引擎做一个很好的平衡。
所有MyISAM
请运行此查询
查询 #1
此查询将告诉您数据需要多大的 MyISAM 密钥缓冲区(以 MB 为单位)。当然,安装的 RAM 数量优先,所以请使用常识。您应该运行此查询:
查询 #2
如果 DataToIndexRatio 小于 3,则查看所有索引。您的索引可能太大或索引太多。如果删除所有未使用的索引,这将提高 DataToIndexRatio,然后您可以运行查询 #1,并获得较小的建议。再次使用常识,因为您只有 768M。就我个人而言,我不会超过 256M。因此,您应该选择 256M 或查询 #1 的结果,以较小者为准。
如果您没有任何 InnoDB 数据,则将其添加到 my.cnf (my.ini)
并重启mysql。这样,mysqld 将启动得更快,因为它不必检查 InnoDB 崩溃恢复。
您提到您的应用程序是写入密集型的。INSERT、UPDATE、DELETE 混合使用会导致表和索引碎片匆忙。如果是这种情况,您需要将 MYiSAM 表的行格式转换为 Fixed。为什么?
MySQL Database Design and Tuning一书在第 72,73 页推荐使用
ROW_FORMAT=FIXED
。这将在内部将所有 VARCHAR 字段转换为 CHAR。它会使 MyISAM 表更大,但对其执行 SELECT 会更快。我可以亲自证明这一点。我曾经有一张 1.9GB 的桌子。我用ALTER TABLE tblname ROW_FORMAT=FIXED
. 该表最终为 3.7GB。在没有改进或改变其他任何东西的情况下,针对它的 SELECT 速度提高了 20-25%。所有 InnoDB
请运行此查询
查询 #3
此查询将告诉您数据和索引需要多大的 InnoDB 缓冲池(以 MB 为单位)。当然,安装的 RAM 数量优先,所以请使用常识。您应该运行查询 #2 并更严格地应用相同的 DataToIndexRatio 规则,因为 InnoDB 中的二级索引往往比 MyISAM 中的二级索引更加臃肿。
如果您正在运行 MySQL 5.5,请调整 InnoDB 以实现多 CPU 参与:
因为您只有 768MB 的 RAM,我再次建议 innodb_buffer_pool_size 或查询 #3 的结果为 256MB,以较小者为准。
您应该调整 InnoDB 日志缓冲区的大小。例如,如果您选择的 innodb_buffer_pool_size 是 256M,则需要将日志文件的大小调整为该数字的 25%,即 64M,如下所示:
步骤 01) 关闭 mysql
service mysql stop
对于 Linuxnet stop mysql
适用于 Windows步骤 02) 删除 ib_logfile0 和 ib_logfile1
步骤 03) 将此添加到 my.cnf (my.ini)
STEP 04) Startup mysql (log files are recreated to the new size)
service mysql start
对于 Linuxnet start mysql
适用于 WindowsInnoDB 和 MyISAM 混合
我将应用上述规则并将 key_buffer_size 的128MB和innodb_buffer_pool size的 128MB 分开。
概括
我选择 256M,因为无论您拥有何种存储引擎组合,您都拥有一个写入密集型应用程序。您需要为 InnoDB 和 MyISAM 索引做好缓存。
另一方面,我只预留了 256MB 的一个或两个存储引擎,因为操作系统在以下方面需要尽可能多的 RAM:
玩得开心配置所有这些方面!!!