所以我对调整 InnoDB 还很陌生。我正在慢慢地将表(在必要时)从 MyIsam 更改为 InnoDB。我在 innodb 中有大约 100MB,所以我将innodb_buffer_pool_size变量增加到 128MB:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
当我去更改innodb_log_file_size值时(例如mysql 的 innodb 配置页面上的my.cnf注释将日志文件大小更改为缓冲区大小的 25%。所以现在我的 my.cnf 看起来像这样:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
Run Code Online (Sandbox Code Playgroud)
当我重新启动服务器时,出现此错误:
110216 9:48:41 InnoDB:初始化缓冲池,大小 = 128.0M
110216 9:48:41 InnoDB:缓冲池初始化完成
InnoDB:错误:日志文件 ./ib_logfile0 的大小不同 0 5242880 字节
InnoDB:比指定的.cnf 文件 0 33554432 字节!
110216 9:48:41 [错误] …
MyISAM 如何比 InnoDB“更快”,如果
MyISAM 用于将每个表存储在相应的文件中很方便。InnoDB 在很多方面都取得了进步,但我想知道为什么 InnoDB 将所有数据库存储在一个文件中(ibdata1默认情况下)。
我知道 InnoDB 将通过表的单个索引文件映射文件中数据的位置,但我不明白为什么它将所有数据混合在一个文件中。更重要的是,为什么要混合服务器上所有数据库的数据?
MyISAM 的一个有趣功能是,可以将数据库文件夹复制/粘贴到另一台机器上,然后使用该数据库(无需转储)。
大多数表使用 MySQL 5.6 和 InnoDB 存储引擎。InnoDB 缓冲池大小为 15 GB,Innodb DB + 索引大约为 10 GB。服务器有 32GB RAM 并运行 Cent OS 7 x64。
我有一张包含大约 1000 万条记录的大表。
我每 24 小时从远程服务器获取更新的转储文件。该文件为 csv 格式。我无法控制那种格式。该文件约为 750 MB。我尝试将数据逐行插入 MyISAM 表,花了 35 分钟。
我只需要从文件中的每行 10-12 中取出 3 个值并在数据库中更新它。
实现这样的目标的最佳方法是什么?
我需要每天都这样做。
目前 Flow 是这样的:
以上操作大约需要30-40 分钟才能完成,在执行此操作时,还有其他更新正在进行中,这给了我
超过锁等待超时;尝试重新启动事务
使用LOAD DATA LOCAL INFILE. 在 MyISAM 中,38.93 sec在 InnoDB 中需要 7 分 5.21 秒。然后我做了:
UPDATE table1 t1, table2 t2
SET …Run Code Online (Sandbox Code Playgroud) 我有一个只选择相等的应用程序,我想我应该在 btree 索引上使用哈希索引。令我沮丧的是,MyISAM 或 InnoDB 不支持哈希索引。那是怎么回事?
我有一个很烦人的问题。我想使用 INNODB 作为我的主要数据库引擎并放弃 MyISAM,因为我需要前者来使用 galera-cluster 进行冗余。
我将newbb_post表复制(描述如下)到一个名为的新表newbb_innopost并将其更改为 InnoDB。每个表当前都保存5,390,146条目。
在新启动的数据库上运行这些选择(因此此时不涉及缓存!)数据库产生以下结果(省略完整的输出,请注意我什至不要求数据库对结果进行排序):
SELECT post.postid, post.attach FROM newbb_post AS post WHERE post.threadid = 51506; . . | 5401593 | 0 | | 5401634 | 0 | +---------+--------+ 62510 行(0.13 秒)
SELECT post.postid, post.attach FROM newbb_innopost AS post WHERE post.threadid = 51506; . . | 5397410 | 0 | | 5397883 | 0 | +---------+--------+ 62510 行(1 分 22.19 秒)
0.13 秒到 86.19 秒 (!)
我想知道为什么会这样。我确实在 Stackexchange 上阅读了一些涉及 InnoDB …
我几乎只在我的应用程序中使用 InnoDB。但是,如果我在设置表时不小心,我会忘记更改它并且 phpmyadmin 坚持使用 MyISAM。有没有办法更改默认存储引擎?
我很难理解表分区的优缺点。我即将开始一个项目,该项目将有 8 个表,其中一个将是主数据表,将包含 180-260 百万条记录。因为它将是正确索引的表,所以我正在考虑将表记录限制为 2000 万,这样我将不得不创建 9-13 个表。
但我不太确定它将如何提高性能,因为它们将位于同一台机器上(32GB RAM)?
我正在使用 MySQL 并且表将是 MyISAM 并且大表将在 id 字段上有索引,并且没有进一步的复杂性,例如全文搜索等。
还请阐明表分区与数据库分区。
myisam ×10
mysql ×10
innodb ×8
performance ×3
index ×1
logs ×1
mysql-5.5 ×1
mysql-5.6 ×1
mysqldump ×1
partitioning ×1
phpmyadmin ×1
update ×1