mysql優(yōu)化的幾個方面
- 硬件 主要有 cpu正卧、內(nèi)存惯豆、磁盤io池磁、網(wǎng)絡(luò)
- 系統(tǒng)配置 操作系統(tǒng)的不同、版本楷兽、以及操作系統(tǒng)的配置
- 數(shù)據(jù)庫 存儲引擎的選擇地熄、數(shù)據(jù)庫服務(wù)器配置參數(shù)、
- 表結(jié)構(gòu)設(shè)計及sql語句 sql語句優(yōu)化芯杀、編寫端考、表結(jié)構(gòu)的設(shè)計
硬件
cpu選擇
應(yīng)用為計算密集型,應(yīng)該使用更高的頻率
應(yīng)用的并發(fā)量高揭厚,則需要更多的核數(shù)
內(nèi)存
一般來說通過增加內(nèi)存却特,將數(shù)據(jù)緩存到內(nèi)存中,從而提高數(shù)據(jù)吞吐性能
瓶頸筛圆,如所有的數(shù)據(jù)都緩存到內(nèi)存中了裂明,在增加內(nèi)存不會有性能的提升
myisam 會將索引緩存到內(nèi)存中
數(shù)據(jù)通過操作系統(tǒng)緩存
innodb 會同時在內(nèi)存中緩存數(shù)據(jù)和索引內(nèi)存的提升對于寫會有提升,可以將多次寫入改為一次寫入
內(nèi)存的頻率越高太援,速度越快
磁盤的配置和選擇
- 傳統(tǒng)機械磁盤
讀取過程:1)移動磁頭到磁盤表面正確的位置上闽晦,2)等待磁盤旋轉(zhuǎn),使所需的數(shù)據(jù)在磁頭之下提岔,3)等待磁盤旋轉(zhuǎn)過去仙蛉,所有所需的數(shù)據(jù)被磁頭讀出
12稱為訪問時間,3傳輸速度
選擇因素:磁盤容量碱蒙,傳輸速度荠瘪,訪問時間,主軸轉(zhuǎn)速,物理尺寸
raid機械磁盤 磁盤冗余隊列的簡稱
ssd
相比機械磁盤哀墓,可以加強隨機讀寫性能鞭莽,隨機讀的性能提升明顯
支持的更好的并發(fā)
長時間密集寫操作容易損壞ssd網(wǎng)絡(luò)存儲
外部文件存儲設(shè)備加載到服務(wù)器上的方法
最適合用于數(shù)據(jù)庫備份
系統(tǒng)
mysql適合的操作系統(tǒng)
windows、FreeBSD麸祷、Solaris、linux
- centos優(yōu)化
linux優(yōu)化 -
插件式存儲引擎 存儲引擎針對于表褒搔,而不是針對于庫的
存儲引擎
myisam
myisam存儲引擎由MYD和MYI組成
特性
- 并發(fā)性和鎖級別 使用的是表級鎖阶牍,讀寫混合操作并發(fā)差,
- 表損壞修復(fù) check table tablename 進行檢查星瘾, repair table tablename 進行修復(fù)
- 支持的索引類型 全文索引走孽,
- 支持數(shù)據(jù)壓縮 myisampack命令壓縮 已壓縮的表只能進行讀操作
限制
- mysql5.0之前默認表大小為4g,5.0之后支持256tb
適用場景
- 非事務(wù)應(yīng)用
- 只讀類應(yīng)用
- 空間類應(yīng)用
innodb
mysql5.5版本之后稱為默認存儲引擎
適合處理大量小事務(wù)
innodb使用表空間進行數(shù)據(jù)存儲
innodb_file_per_tabl
on 獨立表空間:tablename.ibd; 通過optimize table命令收縮系統(tǒng)文件琳状,可以同時向多個文件刷新數(shù)據(jù)
off 系統(tǒng)表空間 ibdatax 無法簡單收縮文件大小磕瓷,會產(chǎn)生io瓶頸
將系統(tǒng)表空間轉(zhuǎn)到獨立表空間,1mysqldump導(dǎo)出念逞,2停止mysql服務(wù)困食,修改參數(shù),3重啟mysql翎承,重建innodb表空間硕盹,4重新導(dǎo)入
特性
- innodb 是一種事務(wù)型存儲引擎
- 完全支持事務(wù)的acid特性
- redo log 和 undo log redo log 實現(xiàn)事務(wù)持久性,undo log 未提交事務(wù)
- innodb 支持行級鎖叨咖,行級鎖可以最大程度支持并發(fā)瘩例,行級鎖是由存儲引擎實現(xiàn)的
性能監(jiān)控命令
show engine innodb status
鎖的概念
鎖的主要作用是管理共享資源的并發(fā)訪問
鎖用于實現(xiàn)事務(wù)的隔離性
鎖的類型:讀鎖(共享的,不相互干擾)甸各,寫鎖(排他的垛贤,堵塞其他讀鎖和寫鎖)
鎖的粒度:被加鎖資源的最小單位,行級鎖趣倾,表級鎖聘惦,鎖定的數(shù)據(jù)越少,并發(fā)越高
阻塞:不同鎖之間的兼容誊酌,一個鎖需要等待另一個鎖的釋放部凑,因而產(chǎn)生了阻塞,阻塞是為了確保事務(wù)的可以并發(fā)碧浊。大量慢查詢或者是alter table
死鎖:兩個或者兩個以上事務(wù)涂邀,相互占用對方等待的資源。系統(tǒng)會自動處理箱锐。少量死鎖不會對系統(tǒng)發(fā)生影響比勉。
CSV
文件系統(tǒng)存儲特點:
- 以文件方式存儲
- 所有的列 都是非空的
- 不支持索引
- 不適合大表 不適合在線處理
- 可以直接對文件進行編輯
適用場景,作為數(shù)據(jù)交換的中間表使用
- .csv 文件存儲表內(nèi)容
- .csm 文件存儲表的元數(shù)據(jù)和數(shù)量數(shù)
- .frm 文件存儲表結(jié)構(gòu)信息
archive
文件系統(tǒng)存儲特點
- 以zlib對表數(shù)據(jù)進行壓縮,磁盤io更少
- 數(shù)據(jù)存儲在ARZ為后綴的文件中
- frm 存儲表結(jié)構(gòu)
存儲特點
- 只支持insert 和 select
- 支持在自增id 上建立索引
- 記錄日志和數(shù)據(jù)采集類應(yīng)用
memory
文件系統(tǒng)存儲特點
- 也稱為heap存儲引擎浩聋,所以所有數(shù)據(jù)存儲在內(nèi)存中
- 重啟數(shù)據(jù)消失 需要數(shù)據(jù)是可再生的
- 表結(jié)構(gòu) 存儲在ifm
功能特點
- 支持hash 等值查找
- btree索引 范圍查找
- 所有字段的長度都是定長的观蜗,varchar(10). => char(10)
- 不支持 text blog 大字段類型
- 使用的是表級鎖
- 最大大小由 max_heap_table_size. 默認16mb 修改之后需要重建已存在的表
臨時表
- 系統(tǒng)使用的(未超過限制使用momery臨時表, 超過限制 使用myisam 臨時表)
- create temporary table 建立的臨時表