欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
MySQL內存使用的全局共享講解 - 數據庫應用 - 編程開(kāi)發(fā) - 伊甸網(wǎng)

全局共享內存主要是 MySQL Instance(mysqld進(jìn)程)以及底層存儲引擎用來(lái)暫存各種全局運算及可共享的暫存信息,如存儲查詢(xún)緩存的 Query Cache,緩存連接線(xiàn)程的 Thread Cache,緩存表文件句柄信息的 Table Cache,緩存二進(jìn)制日志的 BinLog Buffer, 緩存 MyISAM 存儲引擎索引鍵的 Key Buffer以及存儲 InnoDB 數據和索引的 InnoDB Buffer Pool 等等。下面針對 MySQL 主要的共享內存進(jìn)行一個(gè)簡(jiǎn)單的分析。

查詢(xún)緩存(Query Cache):查詢(xún)緩存是 MySQL 比較獨特的一個(gè)緩存區域,用來(lái)緩存特定 Query 的結果集(Result Set)信息,且共享給所有客戶(hù)端。通過(guò)對 Query 語(yǔ)句進(jìn)行特定的 Hash 計算之后與結果集對應存放在 Query Cache 中,以提高完全相同的 Query 語(yǔ)句的相應速度。當我們打開(kāi) MySQL 的 Query Cache 之后,MySQL 接收到每一個(gè) SELECT 類(lèi)型的 Query 之后都會(huì )首先通過(guò)固定的 Hash 算法得到該 Query 的 Hash 值,然后到 Query Cache 中查找是否有對應的 Query Cache。如果有,則直接將 Cache 的結果集返回給客戶(hù)端。如果沒(méi)有,再進(jìn)行后續操作,得到對應的結果集之后將該結果集緩存到 Query Cache 中,再返回給客戶(hù)端。當任何一個(gè)表的數據發(fā)生任何變化之后,與該表相關(guān)的所有 Query Cache 全部會(huì )失效,所以 Query Cache 對變更比較頻繁的表并不是非常適用,但對那些變更較少的表是非常合適的,可以極大程度的提高查詢(xún)效率,如那些靜態(tài)資源表,配置表等等。為了盡可能高效的利用 Query Cache,MySQL 針對 Query Cache 設計了多個(gè) query_cache_type 值和兩個(gè) Query Hint:SQL_CACHE 和 SQL_NO_CACHE。當 query_cache_type 設置為0(或者 OFF)的時(shí)候不使用 Query Cache,當設置為1(或者 ON)的時(shí)候,當且僅當 Query 中使用了 SQL_NO_CACHE 的時(shí)候 MySQL 會(huì )忽略 Query Cache,當 query_cache_type 設置為2(或者DEMAND)的時(shí)候,當且僅當Query 中使用了 SQL_CACHE 提示之后,MySQL 才會(huì )針對該 Query 使用 Query Cache??梢酝ㄟ^(guò) query_cache_size 來(lái)設置可以使用的最大內存空間。

連接線(xiàn)程緩存(Thread Cache):連接線(xiàn)程是 MySQL 為了提高創(chuàng )建連接線(xiàn)程的效率,將部分空閑的連接線(xiàn)程保持在一個(gè)緩存區以備新進(jìn)連接請求的時(shí)候使用,這尤其對那些使用短連接的應用程序來(lái)說(shuō)可以極大的提高創(chuàng )建連接的效率。當我們通過(guò) thread_cache_size 設置了連接線(xiàn)程緩存池可以緩存的連接線(xiàn)程的大小之后,可以通過(guò)(Connections - Threads_created) / Connections * 100% 計算出連接線(xiàn)程緩存的命中率。注意,這里設置的是可以緩存的連接線(xiàn)程的數目,而不是內存空間的大小。

表緩存(Table Cache):表緩存區主要用來(lái)緩存表文件的文件句柄信息,在 MySQL5.1.3之前的版本通過(guò) table_cache 參數設置,但從MySQL5.1.3開(kāi)始改為 table_open_cache 來(lái)設置其大小。當我們的客戶(hù)端程序提交 Query 給 MySQL 的時(shí)候,MySQL 需要對 Query 所涉及到的每一個(gè)表都取得一個(gè)表文件句柄信息,如果沒(méi)有 Table Cache,那么 MySQL 就不得不頻繁的進(jìn)行打開(kāi)關(guān)閉文件操作,無(wú)疑會(huì )對系統性能產(chǎn)生一定的影響,Table Cache 正是為了解決這一問(wèn)題而產(chǎn)生的。在有了 Table Cache 之后,MySQL 每次需要獲取某個(gè)表文件的句柄信息的時(shí)候,首先會(huì )到 Table Cache 中查找是否存在空閑狀態(tài)的表文件句柄。如果有,則取出直接使用,沒(méi)有的話(huà)就只能進(jìn)行打開(kāi)文件操作獲得文件句柄信息。在使用完之后,MySQL 會(huì )將該文件句柄信息再放回 Table Cache 池中,以供其他線(xiàn)程使用。注意,這里設置的是可以緩存的表文件句柄信息的數目,而不是內存空間的大小。

表定義信息緩存(Table definition Cache):表定義信息緩存是從 MySQL5.1.3 版本才開(kāi)始引入的一個(gè)新的緩存區,用來(lái)存放表定義信息。當我們的 MySQL 中使用了較多的表的時(shí)候,此緩存無(wú)疑會(huì )提高對表定義信息的訪(fǎng)問(wèn)效率。MySQL 提供了 table_definition_cache 參數給我們設置可以緩存的表的數量。在 MySQL5.1.25 之前的版本中,默認值為128,從 MySQL5.1.25 版本開(kāi)始,則將默認值調整為 256 了,最大設置值為524288。注意,這里設置的是可以緩存的表定義信息的數目,而不是內存空間的大小。

二進(jìn)制日志緩沖區(Binlog Buffer):二進(jìn)制日志緩沖區主要用來(lái)緩存由于各種數據變更操做所產(chǎn)生的 Binary Log 信息。為了提高系統的性能,MySQL 并不是每次都是將二進(jìn)制日志直接寫(xiě)入 Log File,而是先將信息寫(xiě)入 Binlog Buffer 中,當滿(mǎn)足某些特定的條件(如 sync_binlog參數設置)之后再一次寫(xiě)入 Log File 中。我們可以通過(guò) binlog_cache_size 來(lái)設置其可以使用的內存大小,同時(shí)通過(guò) max_binlog_cache_size 限制其最大大?。ó攩蝹€(gè)事務(wù)過(guò)大的時(shí)候 MySQL 會(huì )申請更多的內存)。當所需內存大于 max_binlog_cache_size 參數設置的時(shí)候,MySQL 會(huì )報錯:“Multi-statement transaction required more than ‘max_binlog_cache_size’ bytes of storage”。

MyISAM索引緩存(Key Buffer):MyISAM 索引緩存將 MyISAM 表的索引信息緩存在內存中,以提高其訪(fǎng)問(wèn)性能。這個(gè)緩存可以說(shuō)是影響 MyISAM 存儲引擎性能的最重要因素之一了,通過(guò) key_buffere_size 設置可以使用的最大內存空間。

InnoDB 日志緩沖區(InnoDB Log Buffer):這是 InnoDB 存儲引擎的事務(wù)日志所使用的緩沖區。類(lèi)似于 Binlog Buffer,InnoDB 在寫(xiě)事務(wù)日志的時(shí)候,為了提高性能,也是先將信息寫(xiě)入 Innofb Log Buffer 中,當滿(mǎn)足 innodb_flush_log_trx_commit 參數所設置的相應條件(或者日志緩沖區寫(xiě)滿(mǎn))之后,才會(huì )將日志寫(xiě)到文件(或者同步到磁盤(pán))中??梢酝ㄟ^(guò) innodb_log_buffer_size 參數設置其可以使用的最大內存空間。
注:innodb_flush_log_trx_commit 參數對 InnoDB Log 的寫(xiě)入性能有非常關(guān)鍵的影響。該參數可以設置為0,1,2,解釋如下:

0:log buffer中的數據將以每秒一次的頻率寫(xiě)入到log file中,且同時(shí)會(huì )進(jìn)行文件系統到磁盤(pán)的同步操作,但是每個(gè)事務(wù)的commit并不會(huì )觸發(fā)任何log buffer 到log file的刷新或者文件系統到磁盤(pán)的刷新操作。

1:在每次事務(wù)提交的時(shí)候將log buffer 中的數據都會(huì )寫(xiě)入到log file,同時(shí)也會(huì )觸發(fā)文件系統到磁盤(pán)的同步;

2:事務(wù)提交會(huì )觸發(fā)log buffer 到log file的刷新,但并不會(huì )觸發(fā)磁盤(pán)文件系統到磁盤(pán)的同步。此外,每秒會(huì )有一次文件系統到磁盤(pán)同步操作。

此外,MySQL文檔中還提到,這幾種設置中的每秒同步一次的機制,可能并不會(huì )完全確保非常準確的每秒就一定會(huì )發(fā)生同步,還取決于進(jìn)程調度的問(wèn)題。實(shí)際上,InnoDB 能否真正滿(mǎn)足此參數所設置值代表的意義正常 Recovery 還是受到了不同 OS 下文件系統以及磁盤(pán)本身的限制,可能有些時(shí)候在并沒(méi)有真正完成磁盤(pán)同步的情況下也會(huì )告訴 mysqld 已經(jīng)完成了磁盤(pán)同步。

InnoDB 數據和索引緩存(InnoDB Buffer Pool):InnoDB Buffer Pool 對 InnoDB 存儲引擎的作用類(lèi)似于 Key Buffer Cache 對 MyISAM 存儲引擎的影響,主要的不同在于 InnoDB Buffer Pool 不僅僅緩存索引數據,還會(huì )緩存表的數據,而且完全按照數據文件中的數據快結構信息來(lái)緩存,這一點(diǎn)和 Oracle SGA 中的 database buffer cache 非常類(lèi)似。所以,InnoDB Buffer Pool 對 InnoDB 存儲引擎的性能影響之大就可想而知了??梢酝ㄟ^(guò) (Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100% 計算得到 InnoDB Buffer Pool 的命中率。

InnoDB 字典信息緩存(InnoDB Additional Memory Pool):InnoDB 字典信息緩存主要用來(lái)存放 InnoDB 存儲引擎的字典信息以及一些 internal 的共享數據結構信息。所以其大小也與系統中所使用的 InnoDB 存儲引擎表的數量有較大關(guān)系。不過(guò),如果我們通過(guò) innodb_additional_mem_pool_size 參數所設置的內存大小不夠,InnoDB 會(huì )自動(dòng)申請更多的內存,并在 MySQL 的 Error Log 中記錄警告信息。

這里所列舉的各種共享內存,是我個(gè)人認為對 MySQL 性能有較大影響的集中主要的共享內存。實(shí)際上,除了這些共享內存之外,MySQL 還存在很多其他的共享內存信息,如當同時(shí)請求連接過(guò)多的時(shí)候用來(lái)存放連接請求信息的back_log隊列等。

本文地址:【伊甸網(wǎng)】http://www.edenw.com/tech/devdeloper/database/2010-07-20/4824.html
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
mysql中內存的使用與分配
MYSQL數據庫調優(yōu)就是這么簡(jiǎn)單
MySQL 性能提升之降龍十八掌
MySQL配置文件my.cnf優(yōu)化詳解
通過(guò)查看mysql 配置參數、狀態(tài)來(lái)優(yōu)化你的mysql
MySQL性能分析
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久