亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4204 | 回復(fù): 0
打印 上一主題 下一主題

MySQL內(nèi)存使用 - 全局共享 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-02-24 15:47 |只看該作者 |倒序瀏覽

轉(zhuǎn):
[color="#7b5717"]朝陽
(iMySQLer.com)
全局共享內(nèi)則主要是 MySQL
Instance(mysqld進程)以及底層存儲引擎用來暫存各種全局運算及可共享的暫存信息,如存儲查詢緩存的 Query
Cache,緩存連接線程的 Thread Cache,緩存表文件句柄信息的 Table Cache,緩存二進制日志的 BinLog
Buffer, 緩存 MyISAM 存儲引擎索引鍵的 Key Buffer以及存儲 InnoDB 數(shù)據(jù)和索引的 InnoDB Buffer
Pool 等等。下面針對 MySQL 主要的共享內(nèi)存進行一個簡單的分析。
查詢緩存(Query Cache):查詢緩存是
MySQL 比較獨特的一個緩存區(qū)域,用來緩存特定 Query 的結(jié)果集(Result Set)信息,且共享給所有客戶端。通過對 Query
語句進行特定的 Hash 計算之后與結(jié)果集對應(yīng)存放在 Query Cache 中,以提高完全相同的 Query 語句的相應(yīng)速度。當(dāng)我們打開
MySQL 的 Query Cache 之后,MySQL 接收到每一個 SELECT 類型的 Query 之后都會首先通過固定的 Hash
算法得到該 Query 的 Hash 值,然后到 Query Cache 中查找是否有對應(yīng)的 Query Cache。如果有,則直接將
Cache 的結(jié)果集返回給客戶端。如果沒有,再進行后續(xù)操作,得到對應(yīng)的結(jié)果集之后將該結(jié)果集緩存到 Query Cache
中,再返回給客戶端。當(dāng)任何一個表的數(shù)據(jù)發(fā)生任何變化之后,與該表相關(guān)的所有 Query Cache 全部會失效,所以 Query Cache
對變更比較頻繁的表并不是非常適用,但對那些變更較少的表是非常合適的,可以極大程度的提高查詢效率,如那些靜態(tài)資源表,配置表等等。為了盡可能高效的利
用 Query Cache,MySQL 針對 Query Cache 設(shè)計了多個 query_cache_type 值和兩個 Query
Hint:SQL_CACHE 和 SQL_NO_CACHE。當(dāng) query_cache_type 設(shè)置為0(或者 OFF)的時候不使用
Query Cache,當(dāng)設(shè)置為1(或者 ON)的時候,當(dāng)且僅當(dāng) Query 中使用了 SQL_NO_CACHE 的時候 MySQL 會忽略
Query Cache,當(dāng) query_cache_type 設(shè)置為2(或者DEMAND)的時候,當(dāng)且僅當(dāng)Query 中使用了
SQL_CACHE 提示之后,MySQL 才會針對該 Query 使用 Query Cache?梢酝ㄟ^ query_cache_size
來設(shè)置可以使用的最大內(nèi)存空間。
連接線程緩存(Thread Cache):連接線程是 MySQL
為了提高創(chuàng)建連接線程的效率,將部分空閑的連接線程保持在一個緩存區(qū)以備新進連接請求的時候使用,這尤其對那些使用短連接的應(yīng)用程序來說可以極大的提高創(chuàng)
建連接的效率。當(dāng)我們通過 thread_cache_size 設(shè)置了連接線程緩存池可以緩存的連接線程的大小之后,可以通過[color="#0000ff"](Connections - Threads_created) / Connections * 100% 計算出連接線程緩存的命中率。注意,這里設(shè)置的是可以緩存的連接線程的數(shù)目,而不是內(nèi)存空間的大小。
表緩存(Table Cache):表緩存區(qū)主要用來緩存表文件的文件句柄信息,在 MySQL5.1.3之前的版本通過 table_cache 參數(shù)設(shè)置,但從MySQL5.1.3開始改為 [color="#0000ff"]table_open_cache
來設(shè)置其大小。當(dāng)我們的客戶端程序提交 Query 給 MySQL 的時候,MySQL 需要對 Query
所涉及到的每一個表都取得一個表文件句柄信息,如果沒有 Table Cache,那么 MySQL
就不得不頻繁的進行打開關(guān)閉文件操作,無疑會對系統(tǒng)性能產(chǎn)生一定的影響,Table Cache 正是為了解決這一問題而產(chǎn)生的。在有了 Table
Cache 之后,MySQL 每次需要獲取某個表文件的句柄信息的時候,首先會到 Table Cache
中查找是否存在空閑狀態(tài)的表文件句柄。如果有,則取出直接使用,沒有的話就只能進行打開文件操作獲得文件句柄信息。在使用完之后,MySQL
會將該文件句柄信息再放回 Table Cache
池中,以供其他線程使用。注意,這里設(shè)置的是可以緩存的表文件句柄信息的數(shù)目,而不是內(nèi)存空間的大小。
表定義信息緩存([color="#0000ff"]Table definition Cache):
表定義信息緩存是從 MySQL5.1.3 版本才開始引入的一個新的緩存區(qū),用來存放表定義信息。當(dāng)我們的 MySQL
中使用了較多的表的時候,此緩存無疑會提高對表定義信息的訪問效率。MySQL 提供了 table_definition_cache
參數(shù)給我們設(shè)置可以緩存的表的數(shù)量。在 MySQL5.1.25 之前的版本中,默認(rèn)值為128,從 MySQL5.1.25
版本開始,則將默認(rèn)值調(diào)整為 256 了,最大設(shè)置值為524288。注意,這里設(shè)置的是可以緩存的表定義信息的數(shù)目,而不是內(nèi)存空間的大小。

進制日志緩沖區(qū)(Binlog Buffer):二進制日志緩沖區(qū)主要用來緩存由于各種數(shù)據(jù)變更操做所產(chǎn)生的 Binary Log
信息。為了提高系統(tǒng)的性能,MySQL 并不是每次都是將二進制日志直接寫入 Log File,而是先將信息寫入 Binlog Buffer
中,當(dāng)滿足某些特定的條件(如 sync_binlog參數(shù)設(shè)置)之后再一次寫入 Log File 中。我們可以通過
binlog_cache_size 來設(shè)置其可以使用的內(nèi)存大小,同時通過 max_binlog_cache_size
限制其最大大。ó(dāng)單個事務(wù)過大的時候 MySQL 會申請更多的內(nèi)存)。當(dāng)所需內(nèi)存大于 max_binlog_cache_size
參數(shù)設(shè)置的時候,MySQL 會報錯:“Multi-statement transaction required more than
‘max_binlog_cache_size’ bytes of storage”。
MyISAM索引緩存([color="#0000ff"]Key Buffer):MyISAM 索引緩存將 MyISAM 表的索引信息緩存在內(nèi)存中,以提高其訪問性能。這個緩存可以說是影響 MyISAM 存儲引擎性能的最重要因素之一了,通過 key_buffere_size 設(shè)置可以使用的最大內(nèi)存空間。
InnoDB 日志緩沖區(qū)([color="#0000ff"]InnoDB Log Buffer):
這是 InnoDB 存儲引擎的事務(wù)日志所使用的緩沖區(qū)。類似于 Binlog Buffer,InnoDB
在寫事務(wù)日志的時候,為了提高性能,也是先將信息寫入 Innofb Log Buffer 中,當(dāng)滿足
innodb_flush_log_trx_commit
參數(shù)所設(shè)置的相應(yīng)條件(或者日志緩沖區(qū)寫滿)之后,才會將日志寫到文件(或者同步到磁盤)中?梢酝ㄟ^ innodb_log_buffer_size
參數(shù)設(shè)置其可以使用的最大內(nèi)存空間。
注:innodb_flush_log_trx_commit 參數(shù)對 InnoDB Log 的寫入性能有非常關(guān)鍵的影響。該參數(shù)可以設(shè)置為0,1,2,解釋如下:
* 0:log buffer中的數(shù)據(jù)將以每秒一次的頻率寫入到log file中,且同時會進行文件系統(tǒng)到磁盤的同步操作,但是每個事務(wù)的commit并不會觸發(fā)任何log buffer 到log file的刷新或者文件系統(tǒng)到磁盤的刷新操作;
* 1:在每次事務(wù)提交的時候?qū)og buffer 中的數(shù)據(jù)都會寫入到log file,同時也會觸發(fā)文件系統(tǒng)到磁盤的同步;
* 2:事務(wù)提交會觸發(fā)log buffer 到log file的刷新,但并不會觸發(fā)磁盤文件系統(tǒng)到磁盤的同步。此外,每秒會有一次文件系統(tǒng)到磁盤同步操作。

外,MySQL文檔中還提到,這幾種設(shè)置中的每秒同步一次的機制,可能并不會完全確保非常準(zhǔn)確的每秒就一定會發(fā)生同步,還取決于進程調(diào)度的問題。實際
上,InnoDB 能否真正滿足此參數(shù)所設(shè)置值代表的意義正常 Recovery 還是受到了不同 OS
下文件系統(tǒng)以及磁盤本身的限制,可能有些時候在并沒有真正完成磁盤同步的情況下也會告訴 mysqld 已經(jīng)完成了磁盤同步。
InnoDB
數(shù)據(jù)和索引緩存(InnoDB Buffer Pool):InnoDB Buffer Pool 對 InnoDB 存儲引擎的作用類似于 Key
Buffer Cache 對 MyISAM 存儲引擎的影響,主要的不同在于 InnoDB Buffer Pool
不僅僅緩存索引數(shù)據(jù),還會緩存表的數(shù)據(jù),而且完全按照數(shù)據(jù)文件中的數(shù)據(jù)快結(jié)構(gòu)信息來緩存,這一點和 Oracle SGA 中的 database
buffer cache 非常類似。所以,InnoDB Buffer Pool 對 InnoDB 存儲引擎的性能影響之大就可想而知了?梢酝ㄟ^
(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) /
Innodb_buffer_pool_read_requests * 100% 計算得到 InnoDB Buffer Pool 的命中率。
InnoDB
字典信息緩存(InnoDB Additional Memory Pool):InnoDB 字典信息緩存主要用來存放 InnoDB
存儲引擎的字典信息以及一些 internal 的共享數(shù)據(jù)結(jié)構(gòu)信息。所以其大小也與系統(tǒng)中所使用的 InnoDB
存儲引擎表的數(shù)量有較大關(guān)系。不過,如果我們通過 [color="#0000ff"]innodb_additional_mem_pool_size 參數(shù)所設(shè)置的內(nèi)存大小不夠,InnoDB 會自動申請更多的內(nèi)存,并在 MySQL 的 Error Log 中記錄警告信息。
這里所列舉的各種共享內(nèi)存,是我個人認(rèn)為對 MySQL 性能有較大影響的集中主要的共享內(nèi)存。實際上,除了這些共享內(nèi)存之外,MySQL 還存在很多其他的共享內(nèi)存信息,如當(dāng)同時請求連接過多的時候用來存放連接請求信息的back_log隊列等。
以上內(nèi)容可能存在分析不妥之處,歡迎各位朋友拍磚,一起交流。
                               
               
               
               
               

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/112017/showart_2185925.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP