mysql - Innodb_Buffer_Pool_Size 性能

标签 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

没有任何表被索引。

最佳答案

调整的方面比您提到的要多得多。

底线非常简单:

  • 将 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 。

如果您有很多大型表,最好在执行 ALTERINSERT 之前设置 innodb_file_per_table=ON ...选择

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

关于mysql - Innodb_Buffer_Pool_Size 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34890228/

相关文章:

mysql - 如何根据公式添加新列?

mysql - 选择与另一列的最大/最小值相对应的列(无连接)

mysql - 在 Synology DS218play 上,WordPress 无法连接到用户数据库,但 phpmyadmin 可以

mysql - 可以用单引号将 SQL 语句中的所有值括起来吗?

android - SharedPreferences 或 SQlite

mysql - 如何使用 mysql.server start 指定启动选项

java - 为 jdbc :mysql 在 mariadb 中禁用持久连接

mysql - 如何在这两个表上创建 select 语句

mysql - 查找停机时间并计算停机时间长度

ruby-on-rails - ActiveRecord 与两个数据库对话?