要深入研究mysql那首先對mysql的一些系統/擴展變量有一定的了解,因為這些變量不僅決定mysql一些配置信息,還影響了mysql的性能優化提升,其中包括安全、優化、并發、復制等等。
筆者上網查了一下,這些資料有限,以及官網的一個中文文檔介紹的內容簡短(不包括值域,作用域,有些變量壓根沒翻譯只是給出值)所以想寫篇文章,一來學習鞏固一下mysql,二來方便以后查閱。其中內容筆者前后用了14天,盡量查閱大量資料(問人,網上查閱,自己測試)以確保盡可能正確,且有些直接從官網英文文檔翻譯過來,但難免會出現因為知識結構不全面而有什么紕漏。
PS:
一、想知道有那些變量(系統變量、狀態變量、集群變量、日志變量…),在mysqladmin 中輸入:“mysqladmin -u 用戶 -p 密碼variable” 或者在mysql命令端用“show variables”顯示
二、以下所有測試的環境:win7、mysql 5.1.49-community-log
三、以下變量中的作用域有全局、會話,值域表示變量值的范圍(這些是中文文檔鎖沒有的)
1、 log_slow_queries | OFF/ON
慢查詢記錄日志,慢查詢是指查詢時間超過設定時間(如下面設為2秒)的查詢,(還有個指標是第29點的min_examined_row_limit)這個可以記錄那些查詢語句比較慢,然后通過分析語句而優化數據庫或查詢語句。具體配置在my.ini加入:
log_show_queries = “日志路徑/文件名” #保存日志的路徑和文件名,確保權限可寫
long_query_time = 2 #超過多少秒則保存查詢數據
log-queries-not-using-indexs #不使用使用索引
PS:加上代碼后重啟mysql后log_slow_queries=ON狀態(默認OFF)
測試:select * from zd_ask;
結果:在指定的文件里面記錄如下
C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld, Version: 5.1.49-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time Id Command Argument
# Time: 120425 20:40:49
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.452026 Lock_time: 0.187010 Rows_sent: 12408 Rows_examined: 12408
use bus7zd;
SET timestamp=1335357649;
select * from zd_ask;
說明:超過時間的查詢語句:select * from zd_ask; 查到的結果數:12408 時間:0.452026 其他就是環境信息。
作用域:全局
-------------------------------------------------
2、log_warnings | 1
默認值為1,表示在錯誤日志當中添加更多日志,日至格式:
120426 11:55:09 [Worning]內容,上網查了一下,國內這個變量的資料少得可憐,查看官網英文文檔,會把一些斷開鏈接的錯誤寫進錯誤日志里面。
可以在配置文件my.ini 加入skip-log-warnings=1來停止log_warning 的使用, skip-log-warnings=1后在mysqladmin 里面用”mysqladmin -u 用戶名-p 密碼 variables”查看,會發現log_warning的值是0而不是默認的1.
作用域:全局
--------------------------------------------------
3、long_query_time | 10.000000
這是和log_slow_queries一起使用的,它是設置慢查詢時間,若值是0.2,則查詢大于0.2秒的定為慢查詢。如果啟用了慢查詢日志,則會把慢查詢的信息寫如慢查詢日志文件中。具體可以查看
作用域:全局 、會話
本文第一點。慢查詢:http://www.phpben.com/?post=67
-------------------------------------------------
4、 low_priority_updates | OFF
這個變量是降低mysql寫數據的權限的,mysql默認情況下寫操作權限高于讀操作。附加一些知識:在mysql MYISAM表中讀寫是串行,即是select時鎖表,insert等待釋放再,反之一樣。然后為了減少鎖存和鎖讀的頻率,則引入了concurrent_insert這個變量,使讀寫能并行操作(具體根據concurrent_insert值還有mysql版本而定)
作用域:全局 、會話
在mysql5.06版本之后,concurrent_insert=0則讀(select)的時候不能執行寫(insert)concurrent_insert=1則select時寫操作把數據寫在文件,concurrent_insert=2和1差不多,不同的是:1在數據沒內存碎片(洞)才能寫在文件尾,否則還是寫在洞里;而2則是在select時并發寫入文件尾,當select釋放讀鎖時,數據寫入洞里面。---推薦用current_insert=2
官網描述:
Value |
Description |
0 |
Disables concurrent inserts |
1 |
(Default) Enables concurrent insert for MyISAM tables that do not have holes |
2 |
Enables concurrent inserts for all MyISAM tables, even those that have holes. For a table with a hole, new rows are inserted at the end of the table if it is in use by another thread. Otherwise, MySQL acquires a normal write lock and inserts the row into the hole. |
原文轉自:http://blogread.cn/it/article/5968