1莹妒、總結(jié)mysql常見的存儲引擎以及特點(diǎn)。
存儲引擎:負(fù)責(zé)把具體SQL語句的結(jié)果完成對磁盤上文件路徑訪問的轉(zhuǎn)換,數(shù)據(jù)庫中的行數(shù)據(jù)都是存放在磁盤塊(page頁)上电抚,因此存儲引擎要把數(shù)據(jù)庫數(shù)據(jù)映射為磁盤塊进泼,并把磁盤塊加載到內(nèi)存中蔗衡。進(jìn)程在進(jìn)行數(shù)據(jù)處理時,沒有權(quán)限直接訪問磁盤中的數(shù)據(jù)乳绕,只有讓內(nèi)核加載所需數(shù)據(jù)至內(nèi)存中后绞惦,進(jìn)程再在內(nèi)存中完成修改,再由內(nèi)核負(fù)責(zé)把數(shù)據(jù)存回磁盤洋措。對于文件系統(tǒng)而言济蝉,數(shù)據(jù)的存儲都是以磁盤塊的方式存儲的,多個磁盤塊組成更大一級的邏輯單位,而不依賴于磁盤本身的數(shù)據(jù)塊王滤。存儲引擎在實(shí)現(xiàn)數(shù)據(jù)處理時贺嫂,在文件系統(tǒng)之上部署文件格式,對于文件而言在邏輯層上會組織一個邏輯單位雁乡,這個邏輯單位叫數(shù)據(jù)頁第喳,大小為16K,是最小分配單位踱稍。對于關(guān)系型數(shù)據(jù)庫而言曲饱,一般一行數(shù)據(jù)都是存儲在一起的,一個數(shù)據(jù)頁可能存放若干條行數(shù)據(jù)寞射,將來在查詢數(shù)據(jù)時渔工,內(nèi)核會把整個數(shù)據(jù)頁加載至內(nèi)存中,而存儲引擎就會從中挑選出一行來返回給查詢者桥温。
常見存儲引擎總結(jié):
MYISAM:MYSQL的經(jīng)典存儲引擎之一引矩,是MySQL5.5.5之前默認(rèn)的存儲引擎,其特點(diǎn)是存儲數(shù)據(jù)量大侵浸,讀取數(shù)據(jù)較快旺韭,占用資源少。但不支持事務(wù)掏觉,不支持?jǐn)?shù)據(jù)緩存区端,只支持索引緩存,不支持MVCC高并發(fā)澳腹,不支持外鍵织盼,讀寫會相互阻塞,支持表級鎖酱塔,崩潰恢復(fù)性差沥邻。適合于表較小,且只讀的數(shù)據(jù)庫羊娃。
InnoDB:支持事務(wù)唐全,讀寫阻塞和隔離等級相關(guān),可緩存數(shù)據(jù)和索引蕊玷,支持聚簇索引邮利,支持MVCC高并發(fā),MySQL5.5.5之后的默認(rèn)存儲引擎垃帅。
Performance_Schema:Performance_Schema數(shù)據(jù)庫專用延届,該數(shù)據(jù)庫主要用于收集數(shù)據(jù)庫服務(wù)器性能參數(shù)。且用戶不能創(chuàng)建存儲引擎為Performance_Schema的表挺智。
Memory:將所有的數(shù)據(jù)存儲在RAM中祷愉,以便在需要快速查找參考和其他類似數(shù)據(jù)的環(huán)境中進(jìn)行快速訪問窗宦。適用于存放臨時數(shù)據(jù)赦颇。
MRG_MYISAM:使MySQL DBA或開發(fā)人員能夠?qū)σ幌盗邢嗤腗YISAM表進(jìn)行邏輯分組二鳄,并將他們作為一個對象使用,適用于大數(shù)據(jù)存儲媒怯,如數(shù)據(jù)倉庫订讼。
Archive:為存儲和檢索大量很少參考的存檔或安全審核信息,只支持查詢和插入操作扇苞,支持行鎖和專用緩存區(qū)欺殿。
Federated聯(lián)合:用于訪問遠(yuǎn)程MYSQL服務(wù)器的代理,通過創(chuàng)建一個連接遠(yuǎn)程MYSQL服務(wù)的客戶端鳖敷,并將查詢傳到服務(wù)器執(zhí)行脖苏,而后完成數(shù)據(jù)的存取,提供連接單獨(dú)MYSQL服務(wù)器的能力定踱,以便從多個物理服務(wù)器創(chuàng)建一個邏輯數(shù)據(jù)庫棍潘,非常適合分布式和數(shù)據(jù)集市環(huán)境。
BDB:可替代InnoDB存儲引擎崖媚,支持COMMIT亦歉,ROLLBACK和其他事務(wù)特性。
Cluter/NDB:MYSQL的簇式數(shù)據(jù)庫引擎畅哑,尤其適合于具有高性能查找要求的應(yīng)用程序肴楷,這類查找需求還要求具有最高的正常工作時間和可用性。
CSV:CSV存儲引擎使用逗號分隔符格式將數(shù)據(jù)存儲在文本文件中荠呐,可以使用CSV引擎以CSV格式導(dǎo)入和導(dǎo)出其他軟件和應(yīng)用程序的數(shù)據(jù)赛蔫。
BLACKHOLE:黑洞存儲引擎接受但不存儲數(shù)據(jù),檢索總是返回一個空值泥张,該功能可用于分布式數(shù)據(jù)庫設(shè)計(jì)呵恢,數(shù)據(jù)自動復(fù)制,但不是本地存儲圾结。
example:用于編寫開發(fā)新的存儲引擎瑰剃。
2、總結(jié)MySQL查詢緩存優(yōu)化總結(jié)筝野。
1晌姚、查看緩存命中率=Query_hits/(Query_hits+Query_insert),若命中率能接受就不用優(yōu)化了歇竟。
2挥唠、若覺得命中率太低,判斷查詢的大部分語句是不是可緩存的焕议,如果發(fā)現(xiàn)有些查詢語句太大了宝磨,超過了系統(tǒng)設(shè)置的最大緩存限制導(dǎo)致不可緩存,調(diào)大query_cache_limit。
3唤锉、如果查詢語句都是可緩存的世囊,進(jìn)一步判斷,查詢語句是不是發(fā)生了很多驗(yàn)證工作窿祥,如果是株憾,索命緩存空間不足,判斷緩存是不是被碎片化導(dǎo)致的晒衩,如果是則減少query_cache_min_unit值嗤瞎,并且flush query cache減少碎片。
4听系、如果不是緩存空間碎片化導(dǎo)致的贝奇,進(jìn)一步查看是不是緩存空間太小,導(dǎo)致緩存的查詢語句太少靠胜,如果是掉瞳,增加緩存空間大小query_cache_size。如果緩存空間大小合適髓帽,再就判斷查詢語句是不是都是新的查詢語句菠赚,如果是則說明查詢不適合用緩存。
5郑藏、如果發(fā)現(xiàn)并沒有很多驗(yàn)證工作衡查,則判斷查詢緩存是否啟用query_cache_type,如果沒有則啟用必盖;如果啟用了拌牲,則說明這些查詢不適合使用查詢緩存
3、MySQL日志各類總結(jié)歌粥。
1塌忽、事務(wù)日志:寫入類型為追加,也稱為“預(yù)寫式日志”失驶,即將數(shù)據(jù)庫的所有執(zhí)行的命令都記錄在其中土居。
2、錯誤日志:數(shù)據(jù)庫服務(wù)啟動和關(guān)閉過程中輸出的事件信息嬉探,包含產(chǎn)生的錯誤信息擦耀、警告信息等。記錄哪些信息由服務(wù)器變量log_warnings來決定涩堤,日志路徑由服務(wù)器變量log_error來決定眷蜓。
3、通用日志:記錄數(shù)據(jù)庫的通用操作胎围,包含錯誤的SQL語句吁系,由服務(wù)器變量general_log=ON來啟用,general_log_file=HOSTNAME.log來指定日志保存路徑德召。默認(rèn)是保存在文件中,也可以保存在表中汽纤,由服務(wù)器變量log_output決定上岗。
4、慢查詢?nèi)罩荆河涗泩?zhí)行時長超過指定時長的操作冒版。slow_query_log=ON來開啟慢查詢液茎,long_query_time=N指定慢查詢時間閾值逞姿,單位是秒辞嗡。slow_query_log_file來指定慢查詢?nèi)罩疚募og_queries_not_using_indexes=ON不使用索引的語句均記錄滞造。
5续室、二進(jìn)制日志:記錄導(dǎo)致數(shù)據(jù)改變或者潛在數(shù)據(jù)改變的SQL語句,不依賴于存儲類型谒养。日志有三種格式挺狰,一種是基于語句記錄,即記錄每條導(dǎo)致數(shù)據(jù)改變的SQL語句买窟,默認(rèn)模式丰泊,日志量少;一種是基于row記錄始绍,即記錄下每一條導(dǎo)致數(shù)據(jù)行改變的語句瞳购,更加安全,日志量大亏推;第三種是混合模式学赛,系統(tǒng)自動判定使用哪種。二進(jìn)制日志的開啟由兩個服務(wù)器變量決定吞杭,一個是sql_log_bin=ON;一個是log_bin指定日志文件位置盏浇,兩個都配置了才算開啟了二進(jìn)制文件。
日志類型由服務(wù)器變量binlog_format來指定芽狗。
服務(wù)器變量max_logbin_size來設(shè)置單個二進(jìn)制日志文件的大小绢掰,日志寫滿后自動新開一個。
binlog_cache_size設(shè)置每次事務(wù)二進(jìn)制日志緩存的大小童擎。
max_binlog_cache_size限制多事務(wù)用于緩存的大小滴劲。
sync_binlog二進(jìn)制日志即使同步磁盤,為1表示緩存立即同步磁盤柔昼,為0表示由操作系統(tǒng)來安排磁盤同步哑芹。
expire_logs_days=N二進(jìn)制日志自動刪除的天數(shù),默認(rèn)為0捕透,即永不刪除聪姿。
用mysqlbinlog可以查看二進(jìn)制日志文件碴萧。
用PURGE BINARY LOGS清除二進(jìn)制日志。
flush logs新開一個二進(jìn)制日志末购。
reset master to #:刪除所有二進(jìn)制日志文件破喻,并重新生成二進(jìn)制文件,日志編號從#開始計(jì)數(shù)
6盟榴、中繼日志:在數(shù)據(jù)庫主從服務(wù)架構(gòu)中曹质,從服務(wù)用來保存從主服務(wù)器同步過來的二進(jìn)制日志。