Pau*_*aul 4 mysql database-partitioning
分区大表时,我可以选择将标志-innodb_file_per_table设置为TRUE或FALSE.True将创建许多文件(每个分区一个)并大大增加我的磁盘使用量,但允许我在不同的卷上扩展分区(我不打算这样做).FALSE会将表保存为一个大文件.假设我将所有文件保存在同一逻辑卷上,我可以期待这两个选项之间的任何显着查询性能差异吗?或者,更一般地说,除了磁盘使用和管理之外,在两个选项之间做出选择时还有什么问题需要考虑吗?
一些统计数据:
正如您已经说过的那样,-innodb_file_per_table将决定一个表是存储在一个文件中还是存储在许多文件中(如果已分区).
以下是每种方法的一些优点和缺点(不一定是完整列表).
Single file per table Multiple files per (partitioned) table
-------------------------------------- --------------------------------------
+ System uses less filehandles - System uses more filehandles
+ One one fsync per second per table - Possibly many more fsync calls (bottleneck)
(less fs overhead (journal etc)) (more fs overhead)
+ Single file uses less space overall - Much larger disk space usage
- Single file fragments badly + Less fragmentation
- Optimize table (et al) takes longer + You can choose to optimize just one file
- One file = one filesystem + You can put heavy traffic files on a fast fs
(e.g. on a solid state disk)
- Impossible to reclaim disk space + possible to emergency-reclaim disk space
in a hurry (truncate table takes long) fast (just delete a file)
- ALTER TABLE can use large % of disk- + rebuilding with ALTER TABLE will use less
space for temp tables while rebuilding temp disk space
Run Code Online (Sandbox Code Playgroud)
一般来说,我不会推荐多个文件.
但是,如果您的工作负载导致严重碎片并且 optimize table耗时太长,那么使用多个文件将是有意义的.
忘记回收空间
有些人对InnoDB表文件总是增长而且从不收缩这一事实大做文章,如果删除行会导致浪费空间.
然后他们提出了回收该空间的方案,以免耗尽可用磁盘空间.(truncate table x).
对于多个文件,这将更快地工作,但所有这些都是无意义的,因为数据库几乎总是增长并且(几乎)从不收缩,因此所有回收空间将浪费大量时间(CPU和IO)在您的表中将是完全锁定(不允许读取和写入).
只是发现在下个月添加数据后,你的90%满盘(回收后50%)将满99%.
但是,当使用ALTER TABLE时要小心......
请考虑以下情形:
- 磁盘已满60%.
- 数据库占50%,其他文件占10%.
如果alter table在任何表上执行操作,如果所有表都在一个文件中,则将耗尽磁盘空间.
如果你有多个文件,你应该没有问题(除了咖啡因过量等待所有的).
| 归档时间: |
|
| 查看次数: |
3392 次 |
| 最近记录: |