mysql核心內幕第六章 伺服器執行緒和資源管理

2021-08-21 22:32:10 字數 1372 閱讀 6043

mysql例項的組成包括許多記憶體共享快,以及大量的後台執行緒。mysql的記憶體共享塊包括:

使用者會話也需要伺服器端的記憶體。此記憶體不共享,稱為執行緒記憶體區域或tma(thread memory area)。

mysql為myisam表的索引分配了緩衝區,由所有執行緒共享。增加該值,你可以獲得更好的索引處理(所有讀和多個寫操作)。從效能試驗的角度,通常為執行mysql伺服器機器記憶體的25%。

mysql通過雜湊和反向鍊錶演算法快速地快取最近使用的索引塊。同時又能快速地將變動內容寫入磁碟。

查詢快取用來快取特定查詢的結果集(result set),且共享給所有客戶端。通過對查詢語句進行特定雜湊計算與結果集對應並存放在查詢快取中,以提高完全相同的查詢語句的速度。

注:當乙個表的資料發生任何變化之後,與該錶相關的所有的query cache都全部失效。

當客戶端程式提交查詢給mysql時,mysql需要對查詢數所涉及到的每乙個表都取得乙個表控制代碼資訊,如果沒有表快取,那麼伺服器就不得不頻繁地進行開啟和關閉檔案的操作,這無疑會對系統效能產生一定的影響,表快取中存放的就是各表控制代碼的資訊。

連線線程是mysql為了提高建立連線線程的效率,將部分空閒的連線線程保持在乙個快取區以備新連線發起請求時使用,這尤其對那些使用短連線的應用程式來說,可以極大地提高建立連線的效率。

每個連線使用具體執行緒的空間包括:

主要用來存放執行緒描述符結構(thd),thd中包含執行緒id和執行緒執行的基本資訊等,伺服器通過配置引數thread_stack來設定為每乙個執行緒棧分配多大的記憶體。

連線快取區用於老是快取客戶端連線線程的連線資訊 和 將返回客戶端的結果集(即客戶端的請求資訊(問題),和服務端的應答資訊(答案))。查詢結果在被傳送到網路上之前,伺服器將這些資訊快取到連線快取區。以等待累積到某個具體值時,一起傳送出去。

這個區域是針對myisam儲存引擎而言的,因為innodb儲存引擎已經自帶了預取技術。該快取區使得大量讀取檔案的操作時伺服器一起讀入大量資訊,以減少i/o次數。

另外執行緒記憶體區域還包括其他型別的區域:批量插入緩衝、連線操作緩衝、排序緩衝等。

簡單情況下,mysql伺服器使用mysys/my_malloc.c中的函式分配記憶體:

此函式先判斷 size 是否合理,再判斷分配成功與否。最後用bzero()為分配的記憶體置零。

此函式申請乙個length大小的記憶體空間,並複製from指向的內容,拷貝到新申請的記憶體空間。

本函式無條件釋放ptr指向的記憶體空間。

特別地,如果伺服器需要一次性分配大量小碎片記憶體,則伺服器將呼叫mysys/mulalloc.c中的void* my_multi_malloc(myf myflags,…)。該函式一次性申請乙個大塊記憶體,由指標變數ptr1,ptr2,…,ptrn指向不同的位置。其中只有 ptr1 才能被釋放,ptr1 的釋放將導致整個大塊記憶體的釋放。

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

高效能MySQL 第六章

查詢優化 索引優化 庫表結構優化 優化查詢嗎,實際上是優化其子任務。優化查詢 1。消除子任務 2。減少子任務執行次數 3。讓子任務執行的更快 查詢效能低下最基本的原因是訪問的資料太多。1 返回的結果 limit,避免返回不需要的資料 而不是返回全部結果集 select 是否需要返回全部列?2 掃瞄的...

MySQL第六章小測

正確答案但是我不會 不會不確定 1 關係模式存在問題 更新異常 插入異常 刪除異常 2 規範化理論是關聯式資料庫進行邏輯設計的理論依據,根據這個理論,關聯式資料庫種的關係必須滿足,每乙個屬性都是 不可分解的 3 關係模式r,若每乙個決定因素都包含碼,則r最高達到 bcnf 若關百系模式r中的屬性全是...