欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL優(yōu)化之InnoDB優(yōu)化

 更新時(shí)間:2017年03月12日 10:38:04   作者:roverliang  
InnoDB是為Mysql處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì)。它的CPU效率可能是任何其它基于磁盤(pán)的關(guān)系數(shù)據(jù)庫(kù)引擎所不能匹敵的。在數(shù)據(jù)量大的網(wǎng)站或是應(yīng)用中Innodb是倍受青睞的。那么它就不需要優(yōu)化了嗎,答案很顯然:當(dāng)然不是!??!

學(xué)習(xí)計(jì)劃很容易就被打斷,堅(jiān)持也不容易。最近公司里開(kāi)會(huì),要調(diào)整業(yè)務(wù)方向,建議學(xué)習(xí)NodeJS。NodeJS之前我就會(huì)一點(diǎn),但是沒(méi)有深入研究。Node的語(yǔ)法和客戶端Js基本上是一樣的,這半年來(lái)很少開(kāi)發(fā)有客戶端的東西。本來(lái)JS基礎(chǔ)還行的我,也對(duì)這塊的知識(shí)陌生了??雌饋?lái)知識(shí)都是用進(jìn)廢退的,不常用了,過(guò)不了多久就會(huì)遺忘。所以又重新復(fù)習(xí)了JS的相關(guān)知識(shí)。學(xué)習(xí)了Node的服務(wù)器與socket知識(shí)。MySQL的計(jì)劃就這樣的擱淺起來(lái),星期天的時(shí)候吃吃喝喝睡睡,早上又懶的要命,熬著熬著就熬到了下午。廢話不多說(shuō)了,繼續(xù)進(jìn)行MySQL的優(yōu)化系列,這次看下InnoDB的優(yōu)化項(xiàng)。

InnoDB的主索引是聚簇索引,索引與數(shù)據(jù)公用表空間。對(duì)于InnoDB來(lái)說(shuō),數(shù)據(jù)就是索引,索引就是數(shù)據(jù)。InnoDB緩存機(jī)制與MyISAM的最大區(qū)別在于,InnoDB不僅緩存索引,同時(shí)還會(huì)緩存數(shù)據(jù)。

一、InnoDB緩存池

InnoDB緩存池(InnoDB buffer pool)是提升InnoDB提升性能的關(guān)鍵,它既可以緩存數(shù)據(jù),又可以緩存索引,甚至其他的管理數(shù)據(jù)(元數(shù)據(jù)、行級(jí)鎖)等??梢允褂胹how variables like 'innodb%pool%'; 來(lái)查看相關(guān)的參數(shù)選項(xiàng)。

mysql> show variables like 'innodb%pool%';
+-------------------------------------+----------------+
| 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是用于設(shè)置InnoDB緩存池(InnoDBBufferPool)的大小,默認(rèn)值是128M.InnoDB緩存池的大小對(duì)InnoDB的整體性能影響較大,如果當(dāng)前的MySQL服務(wù)器專(zhuān)門(mén)用作MySQL服務(wù),那么可以盡量的增加該參數(shù)的大小。

innodb_buffer_pool_instance

innodb_buffer_pool_instance默認(rèn)值是1,表示InnoDB緩存池被劃分為一個(gè)區(qū)域,適當(dāng)?shù)脑黾釉搮?shù)值,可以提升InnoDB的并發(fā)性能。

innodb_additional_mem_pool_size

指定InnoDB用于來(lái)存儲(chǔ)數(shù)據(jù)字典和其他內(nèi)部數(shù)據(jù)的緩存大小,默認(rèn)值是2M.InnoDB的表個(gè)數(shù)越多,就應(yīng)該適當(dāng)?shù)脑黾釉搮?shù)的大小。

二、InnoDB緩存池內(nèi)部結(jié)構(gòu)

InnoDB在內(nèi)存中維護(hù)一個(gè)緩存池用于緩存數(shù)據(jù)和索引。緩存池可以認(rèn)為是一條很長(zhǎng)的鏈表(list).該鏈表分為兩個(gè)子鏈表,一個(gè)子鏈表存放old page數(shù)據(jù),old page 數(shù)據(jù)是長(zhǎng)時(shí)間未被訪問(wèn)的數(shù)據(jù)頁(yè),亮一個(gè)子鏈表存放new page,new page 是最近被訪問(wèn)的數(shù)據(jù)頁(yè)。old page 默認(rèn)占整個(gè)鏈表大小的37%,可以通過(guò)innodb_old_blocks_pct參數(shù)查看.

mysql> show variables like 'innodb_old_blocks%';
+------------------------+-------+
| Variable_name     | Value |
+------------------------+-------+
| innodb_old_blocks_pct | 37  |
| innodb_old_blocks_time | 1000 |
+------------------------+-------+

old page 和 new page 的交匯點(diǎn)稱為midpoint。

當(dāng)用戶訪問(wèn)數(shù)據(jù)時(shí),InnoDB首先會(huì)再I(mǎi)nnoDB緩存中查找數(shù)據(jù),如果緩存池中沒(méi)有數(shù)據(jù),InnoDB會(huì)將硬盤(pán)中的數(shù)據(jù)插入到InnoDB緩存池中,如果緩存池已滿,則利用LRU算法清楚過(guò)期的老數(shù)據(jù)

三、InnoDB緩存池預(yù)熱。

MySQL服務(wù)器啟動(dòng)一段時(shí)間后,InnoDB會(huì)將經(jīng)常訪問(wèn)的數(shù)據(jù)(業(yè)務(wù)數(shù)據(jù),管理數(shù)據(jù))放入InnoDB緩存中,即InnoDB緩存池中保存的是頻繁需要訪問(wèn)的數(shù)據(jù)(簡(jiǎn)稱熱數(shù)據(jù))。當(dāng)InnoDB緩存池的大小是幾十G或者上百G的時(shí)候,如果重啟MySQL,如果將之前InnoDB緩存池中的熱數(shù)據(jù)加載到InnoDB緩存池中呢?

如果單靠InnoDB自身預(yù)熱的InnoDB緩存池,將會(huì)是一個(gè)不短的時(shí)間周期,這對(duì)于業(yè)務(wù)繁忙的系統(tǒng)來(lái)說(shuō),長(zhǎng)時(shí)間的掛機(jī),是嚴(yán)重的生產(chǎn)事故,不能夠容忍。幸好在MySQL5.6版本支持關(guān)閉服務(wù)時(shí),可以將熱數(shù)據(jù)保存至硬盤(pán),MySQL重啟是首先將硬盤(pán)中的熱數(shù)據(jù)加載到InnoDB的緩存中去,這樣可以縮短預(yù)熱的時(shí)間,提高業(yè)務(wù)繁忙高并發(fā)時(shí)的效率。

mysql> show variables like '%innodb%pool%';
+-------------------------------------+----------------+
| 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

默認(rèn)是關(guān)的,如果開(kāi)啟參數(shù),停止MySQL服務(wù)是,InnoDB緩存中的熱數(shù)據(jù)將會(huì)保存到硬盤(pán)中。

innodb_buffer_pool_load_at_starup

默認(rèn)是關(guān)閉的,如果開(kāi)啟該參數(shù),啟動(dòng)MySQL服務(wù)時(shí),MySQL將本地硬盤(pán)的熱數(shù)據(jù)加載到InnoDB緩存池中。

innodb_buffer_pool_dump_now

默認(rèn)關(guān)閉,如果開(kāi)啟該參數(shù),停止MySQL服務(wù)時(shí),以手動(dòng)方式將InnoDB緩存池中的熱數(shù)據(jù)保存到本地硬盤(pán)。

innodb_buffer_pool_load_now

默認(rèn)關(guān)閉,如果開(kāi)啟該參數(shù),啟動(dòng)MySQL服務(wù)時(shí),以手動(dòng)方式將本地硬盤(pán)的數(shù)據(jù)加載到InnoDB緩存池中,

innodb_buffer_pool_filename

如果開(kāi)啟InnoDB預(yù)熱功能,停止MySQL服務(wù)是,MySQL將InnoDB緩存池中的熱數(shù)據(jù)保存到數(shù)據(jù)庫(kù)根目錄下,默認(rèn)文件名是這個(gè)參數(shù)的值。

開(kāi)啟InnoDB緩存后,可以使用如下命令查看當(dāng)前InnoDB緩存池預(yù)熱的狀態(tài)信息:

show status like 'innodb_buffer%';
+---------------------------------------+-------------+
| 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      |
+---------------------------------------+-------------+

這里面的英語(yǔ)都比較簡(jiǎn)單,就不解釋了。

四、InnoDB實(shí)時(shí)監(jiān)控

mysql> show engine innodb status\G

相關(guān)文章

  • mysql開(kāi)啟慢查詢(EXPLAIN SQL語(yǔ)句使用介紹)

    mysql開(kāi)啟慢查詢(EXPLAIN SQL語(yǔ)句使用介紹)

    這篇文章主要介紹了mysql開(kāi)啟慢查詢 EXPLAIN SQL語(yǔ)句,需要的朋友可以參考下
    2018-01-01
  • Mysql內(nèi)置函數(shù)的實(shí)現(xiàn)示例

    Mysql內(nèi)置函數(shù)的實(shí)現(xiàn)示例

    mysql內(nèi)置了很多的函數(shù),本文主要介紹了Mysql內(nèi)置函數(shù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • MySQL數(shù)據(jù)庫(kù)之約束簡(jiǎn)析

    MySQL數(shù)據(jù)庫(kù)之約束簡(jiǎn)析

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)之約束簡(jiǎn)析,約束是作用于表中字段上的規(guī)則,用于限制存儲(chǔ)在表中的數(shù)據(jù),保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確、有效性和完整性,需要的朋友可以參考下
    2023-09-09
  • MySQL ClickHouse常用表引擎超詳細(xì)講解

    MySQL ClickHouse常用表引擎超詳細(xì)講解

    這篇文章主要介紹了MySQL ClickHouse常用表引擎,ClickHouse表引擎中,CollapsingMergeTree和VersionedCollapsingMergeTree都能通過(guò)標(biāo)記位按規(guī)則折疊數(shù)據(jù),從而達(dá)到更新和刪除的效果
    2022-11-11
  • 詳解MySQL Workbench使用教程

    詳解MySQL Workbench使用教程

    這篇文章主要介紹了詳解MySQL Workbench使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Mysql使用索引的正確方法及索引原理詳解

    Mysql使用索引的正確方法及索引原理詳解

    這篇文章主要給大家介紹了關(guān)于Mysql使用索引的正確方法及索引原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • mysql community server 8.0.12安裝配置方法圖文教程

    mysql community server 8.0.12安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql community Server 8.0.12安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • linux下mysql忘記密碼的解決方法

    linux下mysql忘記密碼的解決方法

    這篇文章主要為大家詳細(xì)介紹了linux下mysql忘記密碼的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • MySql關(guān)于null的函數(shù)使用分享

    MySql關(guān)于null的函數(shù)使用分享

    這篇文章主要介紹了MySql中null的函數(shù)使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法舉例

    MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法舉例

    這篇文章主要給大家介紹了關(guān)于MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法,在MySQL中可以使用聚合函數(shù)與GROUP BY語(yǔ)句可以對(duì)數(shù)據(jù)進(jìn)行分組并進(jìn)行聚合計(jì)算,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01

最新評(píng)論