InnoDB中文参考手册---12文件空间管理和磁盘I/O

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
InnoDB 中文参考手册---犬犬(心帆)翻译12 文件空间管理磁盘I/O12.1 磁盘I/O和rawdevices
InnoDB使用模拟的异步(simulatedasynchronous)的 磁盘I/O来构建 InnoDBInnoDB建立许多的i/o线程来处理i/o操作,就如同read-ahead一样。

从3.23.40b开始, InnoDB使用一种被称为“双写(doublewrite)”的新颖的文件转储清除(flush)技术。这增加了在崩溃或停电后的崩溃修复的性,并因减少了fsync操作的必要次数而某些Unix系统中改善了性能。

InnoDB在将页面写入一个数据文件前先将他们写入到一个相邻近的表空间中的双写(doublewrite)方法被双写缓冲(doublewritebuffer)。只有在写入与转储清除(flush)双写缓冲结束后, InnoDB才将页面写入到数据文件的适当的位置。如果在页面写入期间操作系统崩溃了, InnoDB将在双写缓冲中找出一个完好的副本(copy)来恢复。

从3.23.41开始,你也可以使用一个raw 磁盘分区(一个raw器件)作为一个数据文件。当你创建一个新的数据文件时你必须在 InnoDB_data_file_path设置的数据文件尺寸后立即加上关键词newraw。这个分区必须>=你所指定的尺寸。注意在 InnoDB中1MB为1024x1024bytes,而在 磁盘规约中1MB通过为1000000bytes。
InnoDB_data_home_dir= InnoDB_data_file_path=/dev/hdd1:3Gnewraw;/dev/hdd2:2Gnewraw

 

当你再次启动系统时,你必须将关键词改为raw。否则 InnoDB将重写你的分区!从3.23.44开始,作为一个安全措施, InnoDB将阻止用户修改任何以newraw指定的分区中的数据。在你增加了一个新的分区后,关闭数据库服务器,修改my.cnf文件,将newraw替换为raw,再重起。
InnoDB_data_home_dir= InnoDB_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw
通过使用一个rawdisk,在Windows和某些Unixes系统中可以实现无缓冲(non-buffered)的i/o。
 

InnoDB中有两个启发式的(heuristics)read-aheadheuristics:顺序的(sequential)read-ahead和随机的(random)read-ahead。在sequentialread-ahead中 InnoDB以顺序的方式访问分区中表空间一个片段。因而 InnoDB将预先以一个批量读取数据库页面到i/o系统中。中randomread-ahead中, InnoDB将表空间中似乎在进程的有用的某些空间完全读到缓冲池(bufferpool)内。因而 InnoDB投递剩余地读到i/o系统中。
12.2 文件空间管理
在配置文件中定义的数据文件形成 InnoDB的表空间。文件被简单地耦合起来形成表空间,在使用中不得被剥离。通常你不能得知你的表所占用的空间被指定在哪里,除非使用下面的事实:在一个新建的表空间中 InnoDB从文件的末端开始分配空间。

表空间由默认为16KB的数据库页面组成。每64个连续的页面被组成一区域(extent)。表空间内的“文件(files)”在 InnoDB中被称为段(segments)。回滚段(rollbacksegment)稍微会引起被误解,因为实际上它在表空间内是由许多个段组成。

InnoDB中的每个索引都被分配两个段(segments):一个是为了B-tree的无叶结点(non-leafnodes),另一个是为了叶结点(leafnodes)。这是为了达到包含数据的叶结点的更好的顺序(sequentialityfortheleafnodes)。

当表空间中的一个段增长时, InnoDB为它个别地分配最初的32个页面。之后 InnoDB再分配段的整个区域(extents)。 InnoDB会以每次4个区域(extents)来增加一个大段以确保数据的良好顺序。

表空间中的某些页面包含其它页面的位图(bitmaps),所以在 InnoDB表空间内的一些区域(extents)不能以一个整体分配给段,而只能作为个体页面。

当发出一个查询SHOWTABLESTATUSFROM...LIKE...来询问表空间的剩余空间时, InnoDB将报告表空间中所有空闲区域(extents)中确实可用的部分。 InnoDB通常会保留一些区域用于clean-up和其它的内部目的;这些保留的区域并不包含在剩余可用空间中。 1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值