我需要一个关于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
没有表格被编入索引。
答案 0 :(得分:0)
调整的内容比你提到的要多得多。
底线非常简单:
key_buffer_size
设置为约40M
。从MyISAM更改为InnoDB最佳只是ALTER TABLE t ENGINE=InnoDB
。
然而,可能导致性能下降的事情很多,特别是在索引方面。我有enumerated them并讨论过它们。可能很少会是至关重要的。
ALTER TABLE
与CREATE TABLE ...; INSERT ... SELECT; RENAME TABLE ...
几乎完全相同,只需输入更短的内容。
如果在研究我的博客后,您发现需要更改索引等,那么在单个ALTER
中执行所有步骤是最佳的:
ALTER TABLE t ADD PRIMARY KEY(foo), MODIFY COLUMN ..., ... ENGINE=InnoDB;
是的,你需要一次做一张桌子。
如果您有很多大型表格,最好在执行innodb_file_per_table=ON
或ALTER
之前设置INSERT...SELECT
。
为什么一次测试的时间是另一次的两倍?同样,有很多事情发生,所以我不能给你一个简单的答案。一个致命的可能性:402653184是如此之大以至于导致交换?你有多少RAM?对于2GB服务器,这个数字可能太大了。