來源:txd2016_5_11 發(fā)布時(shí)間:2018-11-24 09:50:16 閱讀量:1095
前邊了解了對(duì)數(shù)據(jù)庫性能影響較大的一些個(gè)因素以及大表、大事務(wù)對(duì)數(shù)據(jù)庫性能所帶來的影響,這里再來了解一下影響數(shù)據(jù)庫性能的幾個(gè)方面,分別為:服務(wù)器硬件、服務(wù)器所選擇的操作系統(tǒng)、數(shù)據(jù)庫存儲(chǔ)引擎的選擇(MySQL:插件式存儲(chǔ)引擎)、數(shù)據(jù)庫參數(shù)配置(影響的主力)、數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)和SQL語句。這里主要了解MySQL本身對(duì)性能的一些影響因素。
一、MySQL體系結(jié)構(gòu)
MySQL大致可以分為三層,分別為:客戶端、MySQL服務(wù)層、存儲(chǔ)引擎層。
客戶端:指可以通過各種協(xié)議連接到MySQL的客戶端,如PHP、ODBC、JDBC等,大多數(shù)C/S架構(gòu)的服務(wù)都是采用這種體系結(jié)構(gòu)。在這一層主要完成的工作包括:連接處理、授權(quán)認(rèn)證、安全等。每個(gè)連接到MySQL的客戶端都會(huì)在服務(wù)器的進(jìn)程中擁有一個(gè)線程,這個(gè)連接的查詢只會(huì) 在這個(gè)單獨(dú)的線程中進(jìn)行執(zhí)行。
MySQL服務(wù)層:包括連接管理器、查詢解析器、查詢優(yōu)化器、緩存、接口等,所有跨存儲(chǔ)引擎的功能都是在這一層實(shí)現(xiàn),這一層實(shí)現(xiàn)了MySQL所有與存儲(chǔ)引擎無關(guān)的特性。
MySQL存儲(chǔ)引擎層:MySQL定義了一系列的存儲(chǔ)引擎接口,實(shí)現(xiàn)這些接口,即可得到自定義的存儲(chǔ)引擎。目前最常用的存儲(chǔ)引擎包括:innodb、myisam、CSV、Memory、archive等。存儲(chǔ)引擎是針對(duì)表而不是針對(duì)于庫的,即同一個(gè)數(shù)據(jù)庫下不同表可以采用不同的存儲(chǔ)引擎。
二、存儲(chǔ)引擎之MyISAM(create table XX表(column1、column2...columns) engine=myisam)
1、MyISAM存儲(chǔ)引擎的文件結(jié)構(gòu)。
MyISAM是MySQL在5.5以前版本的默認(rèn)儲(chǔ)存引擎。一般在系統(tǒng)表、臨時(shí)表都默認(rèn)采用MyISAM存儲(chǔ)引擎(此處的臨時(shí)表指的是在排序、分組等操作中、當(dāng)數(shù)量超過一定的大小之后,有查詢優(yōu)化器建立的臨時(shí)表)。
MyISAM存儲(chǔ)引擎會(huì)將表存儲(chǔ)在兩個(gè)系統(tǒng)文件中,一個(gè)為數(shù)據(jù)文件(以.MYD為擴(kuò)展名),一個(gè)是索引文件(以.MYI為擴(kuò)展名)。建立一個(gè)以MyISAM為存儲(chǔ)引擎的表,將會(huì)產(chǎn)生三個(gè)文件,除了MyISAM引擎特有的兩個(gè)文件(表名.MYD,表名.MYI)以外,還有一個(gè)以.frm文件為擴(kuò)展名的文件(表名.frm),以.frm為擴(kuò)展名的文件用于記錄表的結(jié)構(gòu).
2、MyISAM存儲(chǔ)引擎的特性。
· 并發(fā)性與鎖級(jí)別
MyISAM使用的是表級(jí)鎖而不是行級(jí)鎖(對(duì)表中數(shù)據(jù)進(jìn)行修改時(shí)需要對(duì)整個(gè)表進(jìn)行加鎖,而在對(duì)表中數(shù)據(jù)進(jìn)行讀取時(shí)也需要對(duì)所有的表加共享鎖)。
· 表損壞修復(fù)
MyISAM支持對(duì)由于任意意外關(guān)閉而損壞的MyISAM表進(jìn)行檢查和修復(fù)(非事務(wù)恢復(fù))操作(check table tableName檢查表,repair table tableName恢復(fù)表)
· MyISAM表支持的索引類型
· MyISAM表支持?jǐn)?shù)據(jù)壓縮(myisampack命令,被壓縮后的表“readOnly”)
3、MyISAM存儲(chǔ)引擎的限制。
· 默認(rèn)表大小在5.0版本之前為4G,超過之后需要修改MAX_Rows和AVG_ROW_Length
在5.0版本之后默認(rèn)大小為256TB
4、MyISAM的適用場景
· 非事務(wù)型應(yīng)用(關(guān)系型數(shù)據(jù)庫與NoSql數(shù)據(jù)庫之間最大的區(qū)別)
· 只讀類應(yīng)用
· 空間類應(yīng)用的數(shù)據(jù),需用到空間函數(shù)進(jìn)行計(jì)算的場景(MyISAM是唯一支持空間函數(shù)的引擎)
---------------------