Tom*_*eee 5 mysql innodb tuning mysql-5.5
当在线阅读有关 innodb_log_file_size 时,它说
日志文件的总大小必须小于 4GB
那么如果它需要更大呢?
在书籍和网上,它说将 innodb_log_file_size 设置为至少一个小时的写入值。
目前我有 2 个 1GB 的日志文件,在计算Innodb_os_log_written
1 小时时,至少需要 10GB。2GB 的日志文件只能在我们的峰值负载下进行 20 分钟的写入。
蒂亚!
多年前,我将innodb_log_file_size设置为 2047M。这是在不超过 InnoDB 的 4GB 限制的情况下允许创建事务日志文件的最大数量。我相信它仍然适用于当前版本(MySQL 5.5)。请记住,InnoDB 旨在在 32 位环境中工作,因此有 4GB 的限制。
Percona Server 二进制文件实际上超越了这个限制。我相信我在一次安装中看到了 4GB 作为innodb_log_file_size。没错,我说的是 4GBib_logfile0
和 4GB ib_logfile1
,** 总共 8GB **。这是我雇主的一位客户的数据库服务器的当前列表:
[root@*** ~]$ ls -l /var/lib/mysql/ib*
-rw-rw---- 1 mysql mysql 2283798528 Jan 16 22:53 /var/lib/mysql/ibdata1
-rw-rw---- 1 mysql mysql 4294967296 Jan 16 22:52 /var/lib/mysql/ib_logfile0
-rw-rw---- 1 mysql mysql 4294967296 Jan 16 22:53 /var/lib/mysql/ib_logfile1
Run Code Online (Sandbox Code Playgroud)
当我登录到 mysql 时,我看到此欢迎消息:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 177401833
Server version: 5.1.45-51-log Percona SQL Server (GPL), XtraDB 10
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Run Code Online (Sandbox Code Playgroud)
所以,Percona Server 5.1.45 可以让你制作巨大的 InnoDB 事务日志。所以,我非常确定 Percona Server 5.5(使用 XtraDB)会让你创建大于 2GB 的 InnoDB 日志文件。
如果您确实需要那么大(> 2G)的日志文件,请升级到带有 XtraDB 存储引擎的 Percona Server。它是 InnoDB 的绝佳替代品。
日志文件越大,关闭过程可能变得越长。我会推荐以下内容:
[mysqld]
innodb_fast_shutdown=0
Run Code Online (Sandbox Code Playgroud)
这样,任何留在 ibdata1 中的未提交事务都会在关闭时提交,而不是在启动期间 MySQL 的崩溃恢复时提交。
从你的最后两条评论来看,你对我的问题是
innodb_log_file_size 对于负载来说太低有什么缺点 - 不到 1 小时?
我会说必须将频繁的检查点写入磁盘。这可能会使 InnoDB为事务隔离处理MVCC变得非常烦人。
您可以为您达到峰值的任何事务率正确调整 InnoDB 日志文件的大小。我之前写过这篇文章:在具有 48GB RAM 的服务器上正确调整 30GB InnoDB 表(在 部分下Log File Size
)。这是我之前帖子的摘录:
5MB
是innodb_log_file_size的默认大小。Percona 的mysqlperformanceblog.com提供了两篇关于为您的特定 MySQL 实例计算合适大小的好文章:
基本上,该博客建议测量一小时内写入 InnoDB 日志文件的字节数。这就是我想弄清楚的
SET @TimeInterval = 3600;
SELECT variable_value INTO @num1 FROM information_schema.global_status
WHERE variable_name = 'Innodb_os_log_written';
SELECT SLEEP(@TimeInterval);
SELECT variable_value INTO @num2 FROM information_schema.global_status
WHERE variable_name = 'Innodb_os_log_written';
SET @ByteWrittenToLog = @num2 - @num1;
SET @KB_WL_HR = @ByteWrittenToLog / POWER(1024,1) * 3600 / @TimeInterval;
SET @MB_WL_HR = @ByteWrittenToLog / POWER(1024,2) * 3600 / @TimeInterval;
SET @GB_WL_HR = @ByteWrittenToLog / POWER(1024,3) * 3600 / @TimeInterval;
SELECT @KB_WL_HR,@MB_WL_HR,@GB_WL_HR;
Run Code Online (Sandbox Code Playgroud)
无论返回什么数字@MB_WL_HR
,取一半并将 innodb_log_file_size 调整为它:请参阅我的帖子如何安全地更改 MySQL innodb 变量“innodb_log_file_size”?
归档时间: |
|
查看次数: |
18472 次 |
最近记录: |