|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。参考|参考手册|中文InnoDB中文参考手册---犬犬(心帆)翻译12文件空间办理和磁盘I/O12.1磁盘I/O和rawdevices
InnoDB利用摹拟的异步(simulatedasynchronous)的磁盘I/O来构建InnoDB:InnoDB创建很多的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和别的的外部目标;这些保存的地区其实不包括在残剩可用空间中。
当从一个表中删除数据时,InnoDB将压缩B-tree中响应的索引。这是依附于开释一般的页面或地区(extents)以让其他用户利用残剩空间的删除形式。移除(drop)一个表或删除一切纪录能够包管开释空间给其他用户,可是删除纪录行只要在事件回滚或consistentread后其实不必要时才会被物理的移除。
12.3碎片收拾一个表
假如在一个表的索引内有随机地拔出与删除,索引将会发生碎片。碎片的意义是索引页面在磁盘上的物理按次其实不靠近于页面依字母按次排序的纪录,或分派给索引的64个页面块中有太多的未利用页面。假如周期性的经由过程mysqldump将表转储到一个文件文件上,移除(drop)表,再从转储文件中重载它,这将提拔索引扫描的速率。另外一个碎片收拾的举措就是将表范例改动为MyISAM然后再改成InnoDB。注重MyISAM表在你的操纵体系上必需为一个独自的文件。
假如索引中的拔出老是上升的而老是从前面删除,那末InnoDB的文件空间办理算法能够包管索引中的碎片不会呈现。
2008年1月16号MySQLAB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。 |
|