我需要关于 innodb_buffer_pool_size 的真实且清晰的定义。它应该可以提高性能,但我不确定如何提高性能。
Operative System: Debian 8
Memory: 1468mb
Mysql 5.5
我在测试中所做的是创建一个包含 750001 行的表,默认 innodb_buffer_pool_size=134217728,我在 1 分 17.01 秒内完成了它。
INSERT INTO luis_test3 SELECT * FROM luis_test;
Query OK, 750001 rows affected (1min 17.01 sec)
在那次测试之后,我更改了 innodb_buffer_pool_size=402653184 并将其插入到另一个表(空表)并使其位于
INSERT INTO luis_test2 SELECT * FROM luis_test;
Query OK, 750001 rows affected (2min 3.17 sec)
似乎大小增加了一倍,但性能没有提高,可能会影响插入,但我不确定在哪里可以提高性能。顺便说一句,我必须注意,每次更改时我都会重新启动服务。
我有一整套服务器,其中包含完整的 Innodb MyIsam 表,但我需要遵循正确的约定来在 Innodb 上设置所有内容。实际上我想准备使用 Percona Xtrabackup 进行热备份(所以我的计划不考虑 MyIsam)。 我复制我的数据表大小:
table------------------test
luis_test 316.47
luis_test2 272.83
luis_test3 272.83
luis_test_myIsam 254.16
table_prueba 0.02
没有任何表被索引。
最佳答案
调整的方面比您提到的要多得多。
底线非常简单:
- 将 innodb_buffer_pool_size 设置为可用内存的 70% 左右。 (也就是说,在允许其他应用程序之后。)
- 将
key_buffer_size
设置为大约40M
。
从 MyISAM 更改为 InnoDB 最好只需ALTER TABLE t ENGINE=InnoDB
。
但是,有很多事情可能会导致性能下降,尤其是索引方面。我有enumerated them并讨论了它们。可能很少有人会持批评态度。
ALTER TABLE
的作用与 CREATE TABLE ... 几乎相同;插入...选择; RENAME TABLE ...
,只是输入时间短得多。
如果在研究我的博客后,您发现需要更改索引等,那么在单个 ALTER
中执行所有步骤是最佳选择:
ALTER TABLE t ADD PRIMARY KEY(foo), MODIFY COLUMN ..., ... ENGINE=InnoDB;
是的,您需要一次处理一张 table 。
如果您有很多大型表,最好在执行 ALTER
或 INSERT 之前设置
。innodb_file_per_table=ON
...选择
为什么一项测试的时间是另一项测试的两倍?同样,发生了很多事情,所以我无法给你一个简单的答案。一种致命的可能性:402653184 是否太大以至于导致了交换?你有多少内存?对于 2GB 服务器来说,这个数字可能太大了。
关于mysql - Innodb_Buffer_Pool_Size 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34890228/