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

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </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"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
阅读更多
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭