Innodb_Buffer_Pool_Size性能

时间:2016-01-20 01:56:04

标签: mysql database mariadb

我需要一个关于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

没有表格被编入索引。

1 个答案:

答案 0 :(得分:0)

调整的内容比你提到的要多得多。

底线非常简单:

  • 将innodb_buffer_pool_size设置为可用内存的70%左右。 (即允许其他申请后。)
  • key_buffer_size设置为约40M

从MyISAM更改为InnoDB最佳只是ALTER TABLE t ENGINE=InnoDB

然而,可能导致性能下降的事情很多,特别是在索引方面。我有enumerated them并讨论过它们。可能很少会是至关重要的。

ALTER TABLECREATE TABLE ...; INSERT ... SELECT; RENAME TABLE ...几乎完全相同,只需输入更短的内容。

如果在研究我的博客后,您发现需要更改索引等,那么在单个ALTER中执行所有步骤是最佳的:

ALTER TABLE t ADD PRIMARY KEY(foo), MODIFY COLUMN ..., ... ENGINE=InnoDB;

是的,你需要一次做一张桌子。

如果您有很多大型表格,最好在执行innodb_file_per_table=ONALTER之前设置INSERT...SELECT

为什么一次测试的时间是另一次的两倍?同样,有很多事情发生,所以我不能给你一个简单的答案。一个致命的可能性:402653184是如此之大以至于导致交换?你有多少RAM?对于2GB服务器,这个数字可能太大了。