首頁 資料庫 mysql教程 關於InnoDB型資料庫優化的實例詳解

關於InnoDB型資料庫優化的實例詳解

May 24, 2017 pm 01:53 PM
innodb mysql 最佳化

InnoDB是為Mysql處理龐大資料量時的最大效能設計。它的CPU效率可能是任何其它基於磁碟的關聯式資料庫引擎所不能匹敵的。在資料量大的網站或應用程式中Innodb是倍受青睞的。那麼它就不需要優化了嗎,答案很顯然:當然不是! ! !

學習計畫很容易就被打斷,堅持也不容易。最近公司開會,要調整業務方向,建議學習NodeJS。 NodeJS之前我就會一點,但沒有深入研究。 Node的語法和客戶端Js基本上是一樣的,這半年來很少開發有客戶端的東西。本來JS基礎還行的我,也對這塊的知識陌生了。看起來知識都是用進廢退的,不常用了,過不了多久就會遺忘。所以又重新複習了JS的相關知識。學習了Node的伺服器與socket知識。 MySQL的計畫就這樣的擱淺起來,星期天的時候吃吃喝睡睡,早上又懶的要命,熬著熬著就熬到了下午。廢話不多說了,繼續進行MySQL的最佳化系列,這次看下InnoDB的優化項目。

InnoDB的主索引是叢集索引,索引與資料公用資料表空間。對InnoDB來說,資料就是索引,索引就是資料。 InnoDB快取機制與MyISAM的最大差異在於,InnoDB不僅快取索引,同時還會快取資料

一、InnoDB快取池

InnoDB快取池(InnoDB buffer pool)是提升InnoDB提升效能的關鍵,它既可以快取數據,又可以快取索引,甚至其他的管理資料(元資料、行級鎖)等。可以使用show variables like 'innodb%pool%'; 來檢視相關的參數選項。

<br>

mysql> show variables like &#39;innodb%pool%&#39;;
+-------------------------------------+----------------+
| Variable_name            | Value     |
+-------------------------------------+----------------+
| innodb_additional_mem_pool_size   | 8388608    |
| innodb_buffer_pool_dump_at_shutdown | OFF      |
| innodb_buffer_pool_dump_now     | OFF      |
| innodb_buffer_pool_filename     | ib_buffer_pool |
| innodb_buffer_pool_instances    | 8       |
| innodb_buffer_pool_load_abort    | OFF      |
| innodb_buffer_pool_load_at_startup | OFF      |
| innodb_buffer_pool_load_now     | OFF      |
| innodb_buffer_pool_size       | 134217728   |
+-------------------------------------+----------------+
登入後複製

innodb_buffer_pool_size

innodb_buffer_pool_size是用來設定InnoDB快取池(InnoDBBufferPool)的大小,預設值是128M.InnoDB快取快取池的大小對InnoDB的整體效能影響較大,如果目前的MySQL伺服器專門用作MySQL服務,那麼可以盡量的增加該參數的大小。

innodb_buffer_pool_instance

innodb_buffer_pool_instance預設值是1,表示InnoDB快取池被分割為一個區域,適當的增加該參數值,可以提升InnoDB的並發效能。

innodb_additional_mem_pool_size

#指定InnoDB用來儲存資料字典和其他內部資料的快取大小,預設值是2M.InnoDB的表個數越多,就應該適當的增加該參數的大小。

二、InnoDB快取池內部結構

InnoDB在記憶體中維護一個快取池用於快取資料和索引。快取池可以認為是一條很長的鍊錶(list).這個鍊錶分為兩個子鍊錶,一個子鍊錶存放old page數據,old page 數據是長時間未被訪問的數據頁,亮一個子鍊錶存放new page,new page 是最近被存取的資料頁。 old page 預設佔整個鍊錶大小的37%,可以透過innodb_old_blocks_pct參數查看.


mysql> show variables like &#39;innodb_old_blocks%&#39;;
+------------------------+-------+
| Variable_name     | Value |
+------------------------+-------+
| innodb_old_blocks_pct | 37  |
| innodb_old_blocks_time | 1000 |
+------------------------+-------+
登入後複製

old page 和 new page 的交會點稱為midpoint。

當使用者存取資料時,InnoDB首先會再InnoDB快取中查找數據,如果快取池中沒有數據,InnoDB會將硬碟中的資料插入到InnoDB快取池中,如果快取池已滿,則利用LRU演算法清楚過期的舊資料

三、InnoDB快取池預熱。

MySQL伺服器啟動一段時間後,InnoDB會將經常存取的資料(業務數據,管理資料)放入InnoDB快取中,即InnoDB快取池中保存的是頻繁需要存取的資料(簡稱熱數據)。當InnoDB快取池的大小是幾十G或是上百G的時候,如果重新啟動MySQL,如果將之前InnoDB快取池中的熱資料載入到InnoDB快取池中呢?

如果單靠InnoDB本身預熱的InnoDB快取池,將會是一個不短的時間週期,這對於業務繁忙的系統來說,長時間的掛機,是嚴重的生產事故,不能夠容忍。幸好在MySQL5.6版本支援關閉服務時,可以將熱數據保存至硬碟,MySQL重啟是先將硬碟中的熱資料載入到InnoDB的快取中去,這樣可以縮短預熱的時間,提高業務繁忙高並發時的效率。


mysql> show variables like &#39;%innodb%pool%&#39;;
+-------------------------------------+----------------+
| Variable_name            | Value     |
+-------------------------------------+----------------+
| innodb_additional_mem_pool_size   | 8388608    |
| innodb_buffer_pool_dump_at_shutdown | OFF      |
| innodb_buffer_pool_dump_now     | OFF      |
| innodb_buffer_pool_filename     | ib_buffer_pool |
| innodb_buffer_pool_instances    | 8       |
| innodb_buffer_pool_load_abort    | OFF      |
| innodb_buffer_pool_load_at_startup | OFF      |
| innodb_buffer_pool_load_now     | OFF      |
| innodb_buffer_pool_size       | 134217728   |
+-------------------------------------+----------------+
登入後複製

innodb_buffer_pool_dump_at_shutdown

預設是關的,如果開啟參數,停止MySQL服務是,InnoDB快取中的熱資料將會儲存到硬碟中。

innodb_buffer_pool_load_at_starup

預設是關閉的,如果開啟該參數,啟動MySQL服務時,MySQL將本地硬碟的熱資料載入到InnoDB快取池中。

innodb_buffer_pool_dump_now

默认关闭,如果开启该参数,停止MySQL服务时,以手动方式将InnoDB缓存池中的热数据保存到本地硬盘。

innodb_buffer_pool_load_now

默认关闭,如果开启该参数,启动MySQL服务时,以手动方式将本地硬盘的数据加载到InnoDB缓存池中,

innodb_buffer_pool_filename

如果开启InnoDB预热功能,停止MySQL服务是,MySQL将InnoDB缓存池中的热数据保存到数据库根目录下,默认文件名是这个参数的值。

开启InnoDB缓存后,可以使用如下命令查看当前InnoDB缓存池预热的状态信息:


show status like &#39;innodb_buffer%&#39;;
+---------------------------------------+-------------+
| Variable_name             | Value    |
+---------------------------------------+-------------+
| Innodb_buffer_pool_dump_status    | not started |
| Innodb_buffer_pool_load_status    | not started |
| Innodb_buffer_pool_pages_data     | 218     |
| Innodb_buffer_pool_bytes_data     | 3571712   |
| Innodb_buffer_pool_pages_dirty    | 0      |
| Innodb_buffer_pool_bytes_dirty    | 0      |
| Innodb_buffer_pool_pages_flushed   | 1      |
| Innodb_buffer_pool_pages_free     | 7973    |
| Innodb_buffer_pool_pages_misc     | 0      |
| Innodb_buffer_pool_pages_total    | 8191    |
| Innodb_buffer_pool_read_ahead_rnd   | 0      |
| Innodb_buffer_pool_read_ahead     | 0      |
| Innodb_buffer_pool_read_ahead_evicted | 0      |
| Innodb_buffer_pool_read_requests   | 1497    |
| Innodb_buffer_pool_reads       | 219     |
| Innodb_buffer_pool_wait_free     | 0      |
| Innodb_buffer_pool_write_requests   | 1      |
+---------------------------------------+-------------+
登入後複製

这里面的英语都比较简单,就不解释了。

四、InnoDB实时监控

mysql> show engine innodb status\G

<br>

【相关推荐】

1. Mysql免费视频教程

2. 详解innodb_index_stats导入数据时 提示表主键冲突的错误

3. 实例详解 mysql中innodb_autoinc_lock_mode

4. MySQL中添加新用户权限的实例详解

5. 实例详解mysql中init_connect方法

以上是關於InnoDB型資料庫優化的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1276
29
C# 教程
1256
24
laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

在MySQL中解釋外鍵的目的。 在MySQL中解釋外鍵的目的。 Apr 25, 2025 am 12:17 AM

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

比較和對比Mysql和Mariadb。 比較和對比Mysql和Mariadb。 Apr 26, 2025 am 12:08 AM

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

SQL與MySQL:澄清兩者之間的關係 SQL與MySQL:澄清兩者之間的關係 Apr 24, 2025 am 12:02 AM

SQL是一種用於管理關係數據庫的標準語言,而MySQL是一個使用SQL的數據庫管理系統。 SQL定義了與數據庫交互的方式,包括CRUD操作,而MySQL實現了SQL標準並提供了額外的功能,如存儲過程和触發器。

MySQL:數據庫,PHPMYADMIN:管理接口 MySQL:數據庫,PHPMYADMIN:管理接口 Apr 29, 2025 am 12:44 AM

MySQL和phpMyAdmin可以通過以下步驟進行有效管理:1.創建和刪除數據庫:在phpMyAdmin中點擊幾下即可完成。 2.管理表:可以創建表、修改結構、添加索引。 3.數據操作:支持插入、更新、刪除數據和執行SQL查詢。 4.導入導出數據:支持SQL、CSV、XML等格式。 5.優化和監控:使用OPTIMIZETABLE命令優化表,並利用查詢分析器和監控工具解決性能問題。

See all articles