MariaDB命令介紹及MariaDB架構圖和索引
mariadb> SHOW GLOBAL VARIABLES; 全域變數影響伺服器的全域操作
mariadb> SHOW [SESSION] VARIABLES; 用戶端變數,只對當前會話生效
注意:其中有些參數支援運行時修改,會立即生效;有些參數不支援,且只能通過修改設定檔,並重啟伺服器程式生效
有些參數範圍是全域的,且不可改變;有些可以為每個使用者提供單獨的設定
修改伺服器變數的值
全域: mariadb> SET GLOBAL system_varname=value;
mariadb> SET @@global.system_varname=value;
會話: mariadb> SET [SESSION] system_varname=value;
例如: set global sql_mode=strict_trans_tables; 常用MODE:TRADITIONAL, STRICT_TRANS_TABLES
sql_mode預設為空白,建議開發人員將這個值設為strict 模式,這樣有些問題可以在資料庫的設計和開發階段就能發現,而如果在生產環境下運行資料庫後發現這類問題,那麼修改的代價將變得十分巨大
狀態變數:用於儲存mariadb運行中的統計資料的變數
mariadb> SHOW GLOBAL STATUS;
mariadb> SHOW [SESSION] STATUS;
如何擷取程式預設使用的配置:mysql --print-defaults(用戶端) mysqld --print-defaults(服務端)
mariadb工作於單進程多線程模式,下面是一張mariadb架構圖
mariadb查詢執行路徑
1:用戶端發送一條查詢給伺服器
2:伺服器先會檢查查詢快取,如果命中了緩衝,則立即返回儲存在緩衝中的結果。否則進入下一階段
3:伺服器端進行SQL解析、預先處理,再由最佳化器產生對應的執行計畫
4:MariaDB根據最佳化器產生的執行計畫,調用儲存引擎的API來執行查詢
5:將結果返回給用戶端
上面這張圖可以看到整個students表中,StuID欄位有一個叫PRIMARY的索引
key: PRIMARY 此次查詢用到的索引 type: const 這個欄位表示查詢一行,在資料庫中直接載入一行(rows: 1),這就是索引的效果,通過索引直接定位到了要載入的行
age欄位中沒有索引,type: ALL:進行了全表掃描,取了25行(rows: 25), 把所有行都取出來後使用where條件對每一行逐個過濾
(Extra: Using where)
如果表的資料大的話,第二種相對於第一種查詢會很慢!!
查詢快取:
查詢語句任何字元上的不同,都會導致緩衝不能命中,緩衝的資料都放在記憶體中
哪些查詢可能不會被緩衝:查詢中包含UDF、儲存函數、使用者自訂變數、暫存資料表、mysql庫中系統資料表、或者包含列級許可權的
表、有著不確定值的函數(Now())
查詢快取相關的伺服器變數:query_cache_min_res_unit: 查詢快取中記憶體塊的最小分配單位
較小值會減少浪費,但會導致更頻繁的記憶體配置操作,較大值會帶來浪費,導致片段過多
query_cache_limit:能夠緩衝的最大查詢結果
query_cache_size:查詢快取總共可用的記憶體空間;單位是位元組,必須是1024的整數倍,預設為0表示不開啟
query_cache_wlock_invalidate:如果某表被其它的串連鎖定,是否仍然可以從查詢快取中返回結果;預設值為OFF,表示可以在表
被其它串連的情境中繼續從緩衝返回資料;ON則表示不允許
以上變數可以通過show global variables like '%query%';命令擷取
查看快取命中次數:show global status like 'Qcache%';
查看查詢次數show global status like 'com_select';
快取命中率的評估:Qcache_hits/(Qcache_hits+Com_select)
Linux系統教程:如何檢查MariaDB服務端版本
MariaDB Proxy讀寫分離的實現
Linux下編譯安裝配置MariaDB資料庫的方法
CentOS系統使用yum安裝MariaDB資料庫
安裝MariaDB與MySQL並存
Ubuntu 上如何將 MySQL 5.5 資料庫遷移到 MariaDB 10
[翻譯]Ubuntu 14.04 (Trusty) Server 安裝 MariaDB