來源:MSSQL123 ,
www.cnblogs.com/wy123/p/6595556.html
MySQL變數的概念
個人認為可以理解成MySQL在啟動或者執行過程中讀取的一些引數問題,利用這些引數來啟動服務、響應或者支援使用者的請求等
變數的配置
如果打算長期使用,應該寫入配置檔案,而不是在命中指定,因為在命中設定的變數會隨著MySQL服務的重啟而恢復預設值
另外要註意是設定的當前Session的變數還是全域性的變數。
變數單位
不同的變數的單位不同,比如table_cache是指快取的表的個數,而key_buffer_size則是以位元組為單位
另外還有以頁或者百分比為單位的變數
許多變數可以透過字尾制訂單位,
比如1M表示一百萬位元組,在配置檔案中或者在命令列下有效,
但是在使用set命令的時候,這些單位就無效,必須使用數字,單位為位元組
比如:set @@session.sort_buffer_size = 1024*1024或者set @@session.sort_buffer_size = 1048576
但是配置檔案中設定的時候就不能使用運算式
變數的作用域
有些變數的作用是伺服器級別的,有些是Session級別的,剩下的的一些是物件級別的。
許多回話的變數是全域性變數相等,可以為是預設值
如果改變會話級的變數,它隻影響當前Session,當前Session關閉後當前設定的引數會失效
舉例:
query_cache_size是全域性級的
sort_buffer_size可以在全域性級設定,每個Session也可以獨立設定
join_buffer_size可以在全域性級設定,也可以在Session級設定,一個查詢中如果有多個表關聯,可以為每個關聯分配一個join buffer
除了在配置檔案中設定變數之外,(部分變數)也可以在執行時修改,MySQL稱之為動態配置變數
比如: set global sort_buffer_size = 1024*1024*1024
set sort_buffer_size = 1024*1024*1024
set @@sort_buffer_size = 1024*1024*1024
set @@session.sort_buffer_size = 1024*1024*1024
set @@global.sort_buffer_size = 1024*1024*1024
常見變數的設定與獲取資源說明:
key_buffer_size
為鍵緩衝區(key buffer,也叫鍵快取key cache)分配所有指定的空間,
作業系統不會為該設定立馬分配記憶體,而是等到使用的時候才分配。
table_cache_size
當有執行緒開啟表時,MySQL會檢查這個標量的值,如果大於快取中表的數量,執行緒可以把最先開啟的表放入快取,
如果該值比快取中的表數小,MySQL將從快取中刪除不常用的表
thread_cache_size
當有連線關閉時,MySQL檢查快取中是否還有空間來快取執行緒。
如果有:則快取改執行緒已被下次連線重用
如果沒有:他講銷毀改執行緒而不再快取,
快取中使用的執行緒數,不會立即減少,只有在新的連線刪除快取中的一個執行緒並使用後才會減少
MySQL只在關閉連線時候才在緩衝中增減執行緒,在建立新的連線的時候才從快取中刪除執行緒
query_cache_size
MySQL啟動的時候,一次性分配並且初始化這塊記憶體,如果修改這個變數(即使設定為與當前值一樣)
MySQL會立刻刪除所有快取的查詢,重新分配這片快取到指定大小,並且重新初始化記憶體
read_buffer_size
MySQL只會在查詢需要時才會為該快取分配記憶體,並且會一次性分配改引數指定大小的全部記憶體
read_rnd_buffer_size
MySQL只會在查詢需要時才會為該快取分配記憶體,並且只分配需要的記憶體大小而不是全部指定的大小
應該叫做,max_read_rnd_buffer_size
sort_buffer_size
MySQL只會在查詢需要做排序操作的時候拆毀為該快取分配記憶體,
一旦需要排序,MySQL就會立刻分配給改引數指定大小的全部記憶體,而不管排序是否需要這麼大的記憶體。
由此可見,不用的變數,設定之後的啟用時間,啟用原理,生效方式等都是有一定差異的。
設定變數的潛在的影響
動態設定全域性變數可能會導致意外的副作用。
某些變數改變後會立即生效,比如從緩衝中掃清贓塊,從而引起伺服器相應請求的一些不穩定甚至更嚴重的問題。
●編號303,輸入編號直達本文
●輸入m獲取文章目錄
演演算法與資料結構
更多推薦《18個技術類微信公眾號》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。