MySQL之Innodb_buffer_pool_size怎麼設定
Innodb_buffer_pool_size設定方式
InnoDB表、索引以及其他輔助緩衝區的快取資料被儲存在緩衝區中的記憶體區域。緩衝池的大小對於系統效能很重要。更大的緩衝池可以減少磁碟I/O來多次存取相同表資料。緩衝池大小在專用資料庫伺服器上設定為電腦實體記憶體大小的80%是可行的
緩衝池相關參數說明
1)系統變數參數
Innodb_page_size
#InnoDB頁面大小(預設為16KB)。頁面中包含許多值,頁面大小使它們可以輕鬆轉換為位元組。
Innodb_buffer_pool_chunk_size
innodb_buffer_pool_chunk_size 定義InnoDB緩衝池大小調整操作的區塊大小。預設128M。最大值可設定innodb_buffer_pool_size / innodb_buffer_pool_instances
innodb_buffer_pool_instances
InnoDB 緩衝池分割為的區域數。
Innodb_buffer_pool_pages_data
#數頁在 InnoDB 緩衝池中所包含的資料。該數字包括 髒頁和乾淨頁。使用壓縮表時,報告的 Innodb_buffer_pool_pages_data 值可能大於 Innodb_buffer_pool_pages_total (錯誤#59550)。
Innodb_buffer_pool_pages_total
InnoDB 緩衝池 的總大小(以頁為單位)。使用壓縮表時,報告的Innodb_buffer_pool_pages_data 值可能大於Innodb_buffer_pool_pages_total (錯誤#59550)
2)運行狀態變量
Innodb_buffer_pool_pages_flushed
#從緩衝池重新整理頁面的請求數。
Innodb_buffer_pool_read_requests
表示從記憶體讀取邏輯的請求數。
Innodb_buffer_pool_reads
#InnoDB 無法從緩衝池滿足的邏輯讀取的數量,必須直接從磁碟讀取。
Innodb_buffer_pool_wait_free
#通常,對InnoDB緩衝池的寫入是在後台進行的。當InnoDB需要讀取或建立頁面而沒有可用的乾淨頁面時,InnoDB會先刷新一些髒頁面並等待該操作完成。此計數器統計這些等待的實例。如果設定正確,innodb_buffer_pool_size應該是一個較小的值。
合理的設定快取池相關參數
1、innodb_buffer_pool_size 預設設定係統記憶體百分之80%,後如下規則配合實際狀況調整
mysql> show global status like 'Innodb_buffer_pool_pages_data'; +-------------------------------+---------+ | Variable_name | Value | +-------------------------------+---------+ | Innodb_buffer_pool_pages_data | 1894874 | +-------------------------------+---------+ 1 row in set (0.00 sec) mysql> show global status like 'Innodb_buffer_pool_pages_total'; +--------------------------------+---------+ | Variable_name | Value | +--------------------------------+---------+ | Innodb_buffer_pool_pages_total | 1965960 | +--------------------------------+---------+ 1 row in set (0.00 sec) # 计算是否应该添加内存 使用率 = Innodb_buffer_pool_pages_data/Innodb_buffer_pool_pages_total*100% 当结果 > 95% 则增加 innodb_buffer_pool_size 当结果 < 95% 则减少 innodb_buffer_pool_size, 可适当较少,当然独享业务机器多了也没啥问题
2、innodb_buffer_pool_instances 預設為8,最小1,最大64
對於緩衝池在數千兆位元組範圍內的系統,透過減少爭用不同執行緒讀寫快取頁面的爭用,將緩衝池劃分為多個單獨的實例可以提高並發性。此功能通常用於緩衝池大小在數GB範圍內的系統。使用innodb_buffer_pool_instances 配置選項配置了多個緩衝池實例 ,您也可以調整該innodb_buffer_pool_size值。
許多資料請求可以透過從記憶體中檢索來滿足,特別是在InnoDB緩衝池很大的情況下。您可能會遇到多個執行緒試圖立即存取緩衝池的瓶頸。您可以啟用多個緩衝池以最小化此爭用。使用雜湊函數將每個頁面隨機對應到緩衝池中的一個位置,以儲存或讀取緩衝池中的頁面。每個緩衝池管理自己的空閒列表,刷新列表,LRU和連接到緩衝池的所有其他資料結構,並受其自己的緩衝池互斥量保護。
要啟用多個緩衝池實例,請將innodb_buffer_pool_instances配置選項設為 大於1(預設)的值,最大為64(最大)。此選項僅在將innodb_buffer_pool_size設為1GB或更大時才會生效。您指定的總大小將分配給所有緩衝池。為了獲得最佳效率,指定的組合 innodb_buffer_pool_instances 和innodb_buffer_pool_size,使得每個緩衝池實例至少為1GB。
總結:
# cat /etc/my.cnf [mysqld] ...... innodb_buffer_pool_size = 系统内存%80 innodb_buffer_pool_instances = 大于8的情况下,每个缓冲池实例至少1GB ......
Reference:
https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters .html
https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.htm
对于繁忙的服务器, buffer pool 将划分为多个实例以提高系统并发性, 减少线程间读写缓存的争用。buffer pool 的大小首先受 innodb_buffer_pool_instances 影响, 当然影响较小。
1.Innodb_buffer_pool_pages_data: Innodb buffer pool缓存池中包含数据的页的数目,包括脏页。单位是page。
show global status like 'Innodb_buffer_pool_pages_data';
2.Innodb_buffer_pool_pages_total: innodb buffer pool的页总数目。单位是page。
show global status like 'Innodb_buffer_pool_pages_total';
3.show global status like 'Innodb_page_size'; 查看@@innodb_buffer_pool_size大小,单位字节
SELECT @@innodb_buffer_pool_size/1024/1024/1024; #字节转为G
4.在线调整InnoDB缓冲池大小,如果不设置,默认为128M
set global innodb_buffer_pool_size = 4227858432; ##单位字节
计算Innodb_buffer_pool_pages_data/Innodb_buffer_pool_pages_total*100%
当结果 > 95% 则增加 innodb_buffer_pool_size, 建议使用物理内存的 75%
当结果 < 95% 则减少 innodb_buffer_pool_size, 建议设置大小为: Innodb_buffer_pool_pages_data * Innodb_page_size * 1.05 / (1024*1024*1024)
以上是MySQL之Innodb_buffer_pool_size怎麼設定的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

大數據結構處理技巧:分塊:分解資料集並分塊處理,減少記憶體消耗。生成器:逐一產生資料項,無需載入整個資料集,適用於無限資料集。流:逐行讀取檔案或查詢結果,適用於大檔案或遠端資料。外部儲存:對於超大資料集,將資料儲存在資料庫或NoSQL中。

在PHP中備份和還原MySQL資料庫可透過以下步驟實現:備份資料庫:使用mysqldump指令轉儲資料庫為SQL檔。還原資料庫:使用mysql指令從SQL檔案還原資料庫。

可以透過以下方式最佳化MySQL查詢效能:建立索引,將查找時間從線性複雜度降至對數複雜度。使用PreparedStatements,防止SQL注入並提高查詢效能。限制查詢結果,減少伺服器處理的資料量。最佳化連接查詢,包括使用適當的連接類型、建立索引和考慮使用子查詢。分析查詢,識別瓶頸;使用緩存,減少資料庫負載;優化PHP程式碼,盡量減少開銷。

如何將資料插入MySQL表中?連接到資料庫:使用mysqli建立與資料庫的連線。準備SQL查詢:寫一個INSERT語句以指定要插入的欄位和值。執行查詢:使用query()方法執行插入查詢,如果成功,將輸出一條確認訊息。

若要在PHP中使用MySQL預存程序:使用PDO或MySQLi擴充連接到MySQL資料庫。準備呼叫預存程序的語句。執行儲存程序。處理結果集(如果預存程序傳回結果)。關閉資料庫連線。

使用PHP建立MySQL表需要以下步驟:連接到資料庫。建立資料庫(如果不存在)。選擇資料庫。建立表。執行查詢。關閉連線。

MySQL 8.4(截至 2024 年的最新 LTS 版本)中引入的主要變更之一是預設不再啟用「MySQL 本機密碼」外掛程式。此外,MySQL 9.0完全刪除了這個外掛程式。 此更改會影響 PHP 和其他應用程式

Oracle資料庫和MySQL都是基於關聯式模型的資料庫,但Oracle在相容性、可擴展性、資料類型和安全性方面更勝一籌;而MySQL則專注於速度和靈活性,更適合小到中等規模的資料集。 ①Oracle提供廣泛的資料類型,②提供進階安全功能,③適合企業級應用程式;①MySQL支援NoSQL資料類型,②安全性措施較少,③適合小型到中等規模應用程式。
