亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mysql緩沖和緩存設置詳解

 更新時間:2016年12月17日 17:02:53   投稿:hebedich  
本文主要給大家講解的是mysql優(yōu)化過程中比較重要的2個參數(shù)緩沖和緩存的設置,希望大家能夠喜歡

MySQL 可調(diào)節(jié)設置可以應用于整個 mysqld進程,也可以應用于單個客戶機會話。

服務器端的設置

每個表都可以表示為磁盤上的一個文件,必須先打開,后讀取。為了加快從文件中讀取數(shù)據(jù)的過程,mysqld對這些打開文件進行了緩存,其最大數(shù)目由 /etc/mysqld.conf 中的table_cache 指定。清單 4給出了顯示與打開表有關的活動的方式。

清單 4. 顯示打開表的活動

mysql> SHOW STATUS LIKE 'open%tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables  | 5000 |
| Opened_tables | 195  |
+---------------+-------+
2 rows in set (0.00 sec)

清單 4 說明目前有 5,000 個表是打開的,有 195個表需要打開,因為現(xiàn)在緩存中已經(jīng)沒有可用文件描述符了(由于統(tǒng)計信息在前面已經(jīng)清除了,因此可能會存在 5,000 個打開表中只有 195個打開記錄的情況)。如果 Opened_tables 隨著重新運行SHOW STATUS 命令快速增加,就說明緩存命中率不夠。如果Open_tables 比table_cache設置小很多,就說明該值太大了(不過有空間可以增長總不是什么壞事)。例如,使用 table_cache =5000 可以調(diào)整表的緩存。

與表的緩存類似,對于線程來說也有一個緩存。 mysqld在接收連接時會根據(jù)需要生成線程。在一個連接變化很快的繁忙服務器上,對線程進行緩存便于以后使用可以加快最初的連接。

清單 5 顯示如何確定是否緩存了足夠的線程。

清單 5. 顯示線程使用統(tǒng)計信息

mysql> SHOW STATUS LIKE 'threads%';
+-------------------+--------+
| Variable_name   | Value |
+-------------------+--------+
| Threads_cached  | 27   |
| Threads_connected | 15   |
| Threads_created  | 838610 |
| Threads_running  | 3   |
+-------------------+--------+
4 rows in set (0.00 sec)
 

此處重要的值是 Threads_created,每次mysqld 需要創(chuàng)建一個新線程時,這個值都會增加。如果這個數(shù)字在連續(xù)執(zhí)行SHOW STATUS 命令時快速增加,就應該嘗試增大線程緩存。例如,可以在my.cnf 中使用 thread_cache = 40 來實現(xiàn)此目的。

關鍵字緩沖區(qū)保存了 MyISAM 表的索引塊。理想情況下,對于這些塊的請求應該來自于內(nèi)存,而不是來自于磁盤。清單 6顯示了如何確定有多少塊是從磁盤中讀取的,以及有多少塊是從內(nèi)存中讀取的。

清單 6. 確定關鍵字效率

mysql> show status like '%key_read%';
+-------------------+-----------+
| Variable_name   | Value   |
+-------------------+-----------+
| Key_read_requests | 163554268 |
| Key_reads     | 98247   |
+-------------------+-----------+
2 rows in set (0.00 sec)

Key_reads 代表命中磁盤的請求個數(shù),Key_read_requests是總數(shù)。命中磁盤的讀請求數(shù)除以讀請求總數(shù)就是不中比率 —— 在本例中每 1,000 個請求,大約有 0.6 個沒有命中內(nèi)存。如果每1,000 個請求中命中磁盤的數(shù)目超過 1 個,就應該考慮增大關鍵字緩沖區(qū)了。例如,key_buffer =384M 會將緩沖區(qū)設置為 384MB。

臨時表可以在更高級的查詢中使用,其中數(shù)據(jù)在進一步進行處理(例如 GROUPBY字句)之前,都必須先保存到臨時表中;理想情況下,在內(nèi)存中創(chuàng)建臨時表。但是如果臨時表變得太大,就需要寫入磁盤中。清單 7給出了與臨時表創(chuàng)建有關的統(tǒng)計信息。

清單 7. 確定臨時表的使用

mysql> SHOW STATUS LIKE 'created_tmp%';
+-------------------------+-------+
| Variable_name      | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 30660 |
| Created_tmp_files    | 2   |
| Created_tmp_tables   | 32912 |
+-------------------------+-------+
3 rows in set (0.00 sec)
 

每次使用臨時表都會增大 Created_tmp_tables;基于磁盤的表也會增大 Created_tmp_disk_tables。對于這個比率,并沒有什么嚴格的規(guī)則,因為這依賴于所涉及的查詢。長時間觀察Created_tmp_disk_tables會顯示所創(chuàng)建的磁盤表的比率,您可以確定設置的效率。 tmp_table_size和 max_heap_table_size都可以控制臨時表的最大大小,因此請確保在 my.cnf 中對這兩個值都進行了設置。

每個會話 的設置

下面這些設置針對于每個會話。在設置這些數(shù)字時要十分謹慎,因為它們在乘以可能存在的連接數(shù)時候,這些選項表示大量的內(nèi)存!您可以通過代碼修改會話中的這些數(shù)字,或者在 my.cnf 中為所有會話修改這些設置。

當 MySQL必須要進行排序時,就會在從磁盤上讀取數(shù)據(jù)時分配一個排序緩沖區(qū)來存放這些數(shù)據(jù)行。如果要排序的數(shù)據(jù)太大,那么數(shù)據(jù)就必須保存到磁盤上的臨時文件中,并再次進行排序。如果 sort_merge_passes狀態(tài)變量很大,這就指示了磁盤的活動情況。清單 8 給出了一些與排序相關的狀態(tài)計數(shù)器信息。

清單 8. 顯示排序統(tǒng)計信息

mysql> SHOW STATUS LIKE "sort%";
+-------------------+---------+
| Variable_name   | Value  |
+-------------------+---------+
| Sort_merge_passes | 1    |
| Sort_range    | 79192  |
| Sort_rows     | 2066532 |
| Sort_scan     | 44006  |
+-------------------+---------+
4 rows in set (0.00 sec) 

如果 sort_merge_passes 很大,就表示需要注意sort_buffer_size。例如,sort_buffer_size = 4M 將排序緩沖區(qū)設置為 4MB。

MySQL也會分配一些內(nèi)存來讀取表。理想情況下,索引提供了足夠多的信息,可以只讀入所需要的行,但是有時候查詢(設計不佳或數(shù)據(jù)本性使然)需要讀取表中大量數(shù)據(jù)。要理解這種行為,需要知道運行了多少個 SELECT語句,以及需要讀取表中的下一行數(shù)據(jù)的次數(shù)(而不是通過索引直接訪問)。實現(xiàn)這種功能的命令如清單 9 所示。

清單 9. 確定表掃描比率

mysql> SHOW STATUS LIKE "com_select";
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| Com_select  | 318243 |
+---------------+--------+
1 row in set (0.00 sec)
mysql> SHOW STATUS LIKE "handler_read_rnd_next";
+-----------------------+-----------+
| Variable_name     | Value   |
+-----------------------+-----------+
| Handler_read_rnd_next | 165959471 |
+-----------------------+-----------+
1 row in set (0.00 sec)

Handler_read_rnd_next /Com_select 得出了表掃描比率 —— 在本例中是 521:1。如果該值超過4000,就應該查看 read_buffer_size,例如read_buffer_size = 4M。如果這個數(shù)字超過了8M,就應該與開發(fā)人員討論一下對這些查詢進行調(diào)優(yōu)了!

查看數(shù)據(jù)庫緩存配置情況

mysql> SHOW VARIABLES LIKE ‘%query_cache%';
+——————————+———+
| Variable_name | Value |
+——————————+———+
| have_query_cache | YES | –查詢緩存是否可用
| query_cache_limit | 1048576 | –可緩存具體查詢結(jié)果的最大值
| query_cache_min_res_unit | 4096 |
| query_cache_size | 599040 | –查詢緩存的大小
| query_cache_type | ON | –阻止或是支持查詢緩存
| query_cache_wlock_invalidate | OFF |
+——————————+———+

配置方法:

在MYSQL的配置文件my.ini或my.cnf中找到如下內(nèi)容:

# Query cache is used to cache SELECT results and later returnthem

# without actual executing the same query once again. Having thequery

# cache enabled may result in significant speed improvements, ifyour

# have a lot of identical queries and rarely changing tables.See the

# "Qcache_lowmem_prunes" status variable to check if the currentvalue

# is high enough for your load.

# Note: In case your tables change very often or if your queriesare

# textually different every time, the query cache may result ina

# slowdown instead of a performance improvement.

query_cache_size=0

以上信息是默認配置,其注釋意思是說,MYSQL的查詢緩存用于緩存select查詢結(jié)果,并在下次接收到同樣的查詢請求時,不再執(zhí)行實際查詢處理而直接返回結(jié)果,有這樣的查詢緩存能提高查詢的速度,使查詢性能得到優(yōu)化,前提條件是你有大量的相同或相似的查詢,而很少改變表里的數(shù)據(jù),否則沒有必要使用此功能??梢酝ㄟ^Qcache_lowmem_prunes變量的值來檢查是否當前的值滿足你目前系統(tǒng)的負載。注意:如果你查詢的表更新比較頻繁,而且很少有相同的查詢,最好不要使用查詢緩存。

具體配置方法:

1. 將query_cache_size設置為具體的大小,具體大小是多少取決于查詢的實際情況,但最好設置為1024的倍數(shù),參考值32M。

2. 增加一行:query_cache_type=1

query_cache_type參數(shù)用于控制緩存的類型,注意這個值不能隨便設置,必須設置為數(shù)字,可選項目以及說明如下:

如果設置為0,那么可以說,你的緩存根本就沒有用,相當于禁用了。但是這種情況下query_cache_size設置的大小系統(tǒng)是否要為其分配呢,這個問題有待于測試?

如果設置為1,將會緩存所有的結(jié)果,除非你的select語句使用SQL_NO_CACHE禁用了查詢緩存。

如果設置為2,則只緩存在select語句中通過SQL_CACHE指定需要緩存的查詢。

OK,配置完后的部分文件如下:

query_cache_size=128M

query_cache_type=1

保存文件,重新啟動MYSQL服務,然后通過如下查詢來驗證是否真正開啟了:

mysql> show variables like '%query_cache%';

+——————————+———–+

| Variable_name      |Value  |

+——————————+———–+

| have_query_cache     |YES   |

| query_cache_limit     |1048576  |

| query_cache_min_res_unit  |4096   |

| query_cache_size     | 134217728|

| query_cache_type     |ON    |

| query_cache_wlock_invalidate | OFF   |

+——————————+———–+

6 rows in set (0.00 sec)

主要看query_cache_size和query_cache_type的值是否跟我們設的一致:

這里query_cache_size的值是134217728,我們設置的是128M,實際是一樣的,只是單位不同,可以自己換算下:134217728 = 128*1024*1024。

query_cache_type設置為1,顯示為ON,這個前面已經(jīng)說過了。

總之,看到上邊的顯示表示設置正確,但是在實際的查詢中是否能夠緩存查詢,還需要手動測試下,我們可以通過show statuslike '%Qcache%';語句來測試,現(xiàn)在我們開啟了查詢緩存功能,在執(zhí)行查詢前,我們先看看相關參數(shù)的值:

mysql> show status like '%Qcache%';

+————————-+———–+

| Variable_name    |Value  |

+————————-+———–+

| Qcache_free_blocks   |1    |

| Qcache_free_memory   | 134208800|

| Qcache_hits     |0    |

相關文章

  • MySQL之JSON類型字段的使用技巧分享

    MySQL之JSON類型字段的使用技巧分享

    這篇文章主要介紹了MySQL之JSON類型字段的使用技巧,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MySQL中使用group by 是總是出現(xiàn)1055的錯誤(推薦)

    MySQL中使用group by 是總是出現(xiàn)1055的錯誤(推薦)

    這篇文章主要介紹了MySQL中使用group by 是總是出現(xiàn)1055的錯誤,小編通過查閱相關資料才把問題解決,今天小編記錄下分享到腳本之家平臺,需要的朋友可以參考下
    2020-02-02
  • php 不能連接數(shù)據(jù)庫 php error Can''t connect to local MySQL server

    php 不能連接數(shù)據(jù)庫 php error Can''t connect to local MySQL server

    php 不能連接數(shù)據(jù)庫 php error Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    2011-05-05
  • MySQL?表查詢必備:基本操作詳解

    MySQL?表查詢必備:基本操作詳解

    MySQL表基本查詢指南,帶你輕松掌握SQL查詢技巧!無論你是初學者還是老手,都能在本文中找到適合自己的學習內(nèi)容,讓我們一起探索MySQL的世界吧!
    2024-01-01
  • MySQl數(shù)據(jù)庫必知必會sql語句(加強版)

    MySQl數(shù)據(jù)庫必知必會sql語句(加強版)

    本文給大家分享了一篇關于mysql數(shù)據(jù)庫必會sql語句加強版內(nèi)容,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-04-04
  • Mysql按條件計數(shù)多種實現(xiàn)方法詳解

    Mysql按條件計數(shù)多種實現(xiàn)方法詳解

    這篇文章主要介紹了Mysql按條件計數(shù)多種實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • MySQL性能分析工具profile使用教程

    MySQL性能分析工具profile使用教程

    這篇文章主要介紹了MySQL性能分析工具profile使用教程,本文描述了如何使用MySQL profile,不涉及具體的樣例分析,需要的朋友可以參考下
    2014-10-10
  • 計算機二級考試MySQL知識點 mysql alter命令

    計算機二級考試MySQL知識點 mysql alter命令

    這篇文章主要為大家詳細介紹了計算機二級考試MySQL知識點,詳細介紹了mysql中alter命令的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • MySQL之my.cnf配置文件圖文詳解

    MySQL之my.cnf配置文件圖文詳解

    my.cnf是mysql啟動時加載的配置文件,一般會放在mysql的安裝目錄中,用戶也可以放在其他目錄加載,下面這篇文章主要給大家介紹了關于MySQL之my.cnf配置文件的相關資料,需要的朋友可以參考下
    2022-09-09
  • 本機連接虛擬機MYSQL的操作指南

    本機連接虛擬機MYSQL的操作指南

    要讓本機(主機)連接到虛擬機上的 MySQL 數(shù)據(jù)庫,你需要確保虛擬機和主機之間的網(wǎng)絡連接正常,并且 MySQL 配置允許外部連接,本文給大家介紹了本機連接虛擬機MYSQL的操作指南,需要的朋友可以參考下
    2024-12-12

最新評論