Mysql第十日字符集,XA事務,查詢快取

機械鍵盤發表於2015-07-29

字符集和校對

客戶端和伺服器設定要要保持一致。
校對規則主要是mysql用來比較字串,比如按照大小寫敏感,或者是二進位制。 分別對應了cs,ci(不敏感),bin三個對應項
可以指定校對規則對欄位排序,但是這樣可能會不使用原來的索引。

分散式事務

XA事務需要一個事務協調器來保證所有的事務參與者都完成了準備工作(第一階段)。 都準備好,則提交所有事務(第二階段). Mysql不能扮演這個協調者,只能是參與節點。

內部XA

平衡多個儲存引擎, 以及儲存引擎和寫二進位制日誌之間。
如果開啟了寫二進位制日誌那麼對應的還有這部分XA的消耗。可以使用innodb_support_ca設定為0,但是這樣又回導致複製不可用。 複製需要二進位制日誌和XA實物的支援。

外部XA

也就是一種分散式同步資料的方法。 因為網路延遲,一人等待變成多人等待等等開銷。分散式XA的代價表達。 可以使用別的方式來實現這種同步,比如本地寫入資料,並且放入佇列,更小的進行增量同步,或者使用Mysql本身的複製機制。

查詢快取

可以快取執行計劃,省去解析和生成執行計劃的過程
可以快取資料,只有sql完全匹配才會命中快取
只要相關的表發生了變化,快取即刻失效
快取很多時候會成為資源競爭點,所以都是關閉狀態的,也可以設定的比較小。

Mysql 如何判斷快取命中

直接使用客戶端傳送過來的引數做hash,然後從引用表中查,如何的不同,包括空格等等都會無法命中。

包含不確定因素的函式,比如now(),這種是不會把結果放入快取的。

快取可能帶來查詢的提升,但是因為在查詢前先查快取,查詢後插入快取,這樣會是的一些操作的效能下降,並且因為對於快取的操作都是加鎖排他的使得效率更低。

特別是當事務中需改了某個表,這是會設定為該表部分的快取失效,這個時候如果有該表的查詢操作則會等待,這有可能會造成短暫僵死。

讓快取發揮最大作用

按照剛才說的,貌似用快取有很多的副作用。為了讓其發揮更好的作用,需要一些原則和技巧。
使用 SQL_CACHE能夠使用快取, 使用SQL_NO_CACHE 強制不用快取。

一般對複雜查詢,但是返回資訊很少的這種資料用快取比較合適。

再有一個評價快取好壞的是快取命中率

一些配置項:

  • query_cache_type OFF,ON,DEMAND(只有明確寫SQL_CACHE的語句才會放入查詢快取)
  • query_cache_size 總記憶體空間
  • query_cache_limit 能快取的最大查詢結果。

Mysql快取替代方案, 可以使用系統內部的快取而不使用Mysql的快取。


相關文章