MySQL數(shù)據(jù)庫(kù)的用途?
• 認(rèn)論大家平常都用MySQL來(lái)干些什么事情
• ?
• 寫(xiě)配置,記錄用戶信息,記錄交易信息,記錄商品信息…
• 讀配置,讀用戶信息,讀交易信息,讀商品信息
• 所有的行為都可以歸結(jié)為寫(xiě)數(shù)據(jù),讀數(shù)據(jù)
• MySQL是如何為我們迚行讀數(shù)據(jù)和寫(xiě)數(shù)據(jù)的?
MySQL總體架構(gòu)
• MySQL服務(wù)器監(jiān)聽(tīng)3306端口
• 驗(yàn)證用戶
• 創(chuàng)建線程解析SQL
• 查詢優(yōu)化
• 打開(kāi)表
• 檢查Buffer Pool是否有對(duì)應(yīng)的緩存記錄
• 到磁盤(pán)撈數(shù)據(jù)
• 寫(xiě)入到緩存
• 返回?cái)?shù)據(jù)給客戶端
• 關(guān)閉表
• 關(guān)閉線程
• 關(guān)閉連接
故事小結(jié)
• 如何更快的譏查詢返回我們想要的數(shù)據(jù)?
• 如何更快的譏我們的數(shù)據(jù)寫(xiě)入?
• 我們今天講的MySQL新技術(shù),就是圍繞這兩個(gè)故事來(lái)開(kāi)展
讓查詢更快的返回
• 我們做了哪些努力?
• 整體架構(gòu)
– App前端緩存-Tair
• MySQL(InnoDB)
– Buffer Pool 緩存數(shù)據(jù)和索引信息
常見(jiàn)的Tair+MySQL(InnoDB)應(yīng)用架構(gòu)
Tair+MySQL架構(gòu)的優(yōu)缺點(diǎn)
• 優(yōu)點(diǎn)
– Tair內(nèi)部獲取數(shù)據(jù)是hash get,速度比MySQL的B-Tree速度要好
– Tair服務(wù)器可以緩存大部分的熱點(diǎn)數(shù)據(jù)
• 缺點(diǎn)
• 應(yīng)用程序增加一層邏輯判斷
• Tair能幫助提速查詢,但丌能直接提升數(shù)據(jù)更新速度
• 硬件成本,運(yùn)維成本提高
• 對(duì)于高QPS的應(yīng)用,Tair服務(wù)器丌能有異常
MySQL(InnoDB) Buffer Pool的小結(jié)
• Buffer Pool越大,能緩存的數(shù)據(jù)和索引就越多,QPS就越高
• Buffer Pool緩存命中率越高, DB熱點(diǎn)數(shù)據(jù)查詢性能就越好
• Buffer Pool依賴的是物理內(nèi)存大小,一般是物理內(nèi)存的60%-80%
• But…
– 內(nèi)存是昂貴的
– 內(nèi)存丌是持久性的存儲(chǔ)
– SAS盤(pán)的IOPS有限
常見(jiàn)的MySQL服務(wù)器硬件架構(gòu)
原有的MySQL服務(wù)器架構(gòu)
• 內(nèi)存 24G/48G/96G
• InnoDB buffer Pool 分配物理內(nèi)存的60%到80%
• 磁盤(pán) 8塊到12塊SAS盤(pán) 做Raid 10
• 網(wǎng)卡千兆網(wǎng)卡
• SAS盤(pán)IOPS有限
• 核心數(shù)據(jù)庫(kù)雙十二例子
• innodb_buffer_pool_size = 36G
• innodb_flush_log_at_trx_commit = 1
核心數(shù)據(jù)庫(kù)MySQL集群概況
新出現(xiàn)的硬件技術(shù)(Flash:SSD/FusionIO)
HandlerSocket-基亍MySQL實(shí)現(xiàn)的NoSQL插件
Percona VS MySQL
認(rèn)論時(shí)間
課后思考