Mysql 效能調優 一 3
Mysql 效能調優 一 3
檢視mysql啟動檔案查詢順序:
[root@test1 ~]# mysql --help
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
connect pool--->sql處理過程 --->儲存引擎 --->檔案系統
檢視系統引數:
show variables like '%key_buffer%';
檢視狀態引數:
show status like '%%';
修改全域性系統引數:
set global 引數名=值;
修改session引數:(預設)
set 引數名=值;
mysql> show variables like '%key_buffer%';
+-----------------+---------+
| Variable_name | Value |
+-----------------+---------+
| key_buffer_size | 8388608 |
+-----------------+---------+
1 row in set (0.00 sec)
mysql> show status like '%key_buffer%';
Empty set (0.00 sec)
mysql>
注意:
系統引數與狀態引數區別
key_buffer_size query_cache_size
innodb_buffer_pool_size
table_cache
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++、
引數詳解:
系統引數:
max_connections 配置mysql最大連線數
狀態引數:
max_used_connections 從mysql開機開始,歷史最大連線數
mysql> show variables like '%max_connection%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 5000 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%max_used_connections%';
Empty set (0.00 sec)
mysql> show status like '%max_used_connections%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 1 |
+----------------------+-------+
1 row in set (0.00 sec)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
系統引數:
thread_cache_size 執行緒
狀態引數:
Threads_created 執行緒建立
已建立執行緒處於一個相對穩定值,則thread_cache_size配置合適
mysql> show status like '%Threads_created%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| Threads_created | 1 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%thread_cache_size%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| thread_cache_size | 58 |
+-------------------+-------+
1 row in set (0.00 sec)
mysql>
mysqlslap -uroot -p123456 --query "select count(*) from mysql.user" -i 20 -c 300
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
系統引數:
table_open_cache
狀態引數:
open_tables 當前開啟的table數
opened_tables 歷史開啟的table數
flush tables
cashe與buffer的區別:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
系統引數:
open_files_limit
狀態引數:
open_files
opened_files
os系統方面調整: file-max
檔案控制程式碼
一般情況下,mysql資料庫,產生的資料檔案數都會多於oracle,所以對於開啟檔案數引數管理也相當重要
innodb_file_per_table 表空間
mysql的innodb的表空間,與oracle的表空間存在很大的區別:
要說表空間,Mysql的表空間管理遠遠說不上完善。換句話說,事實上Mysql根本沒有真正意義上的表空間管理。
Mysql的Innodb包含兩種表空間檔案模式,預設的共享表空間和每個表分離的獨立表空間。
只要在my.cnf裡面增加innodb_file_per_table=1就可以從共享表空間切換到獨立表空間。
當然對於已經存在的表,則需要執行alter table MY_TABLE engine=innodb命令遷移資料。
共享表空間方式
由於是預設的方式,就暫且理解為Mysql官方推薦的方式。相對而言所有的資料都在一個(或幾個)檔案中,比較利於管理,
而且在操作的時候只需要open這一個(或幾個)檔案即可,相對來說代價很低。
但問題是在資料達到以G為單位來計算的時候優劣逆轉。一個大小驚人的檔案很不利於管理,而且對於一個如此巨大的檔案來說,
讀寫它需要耗費的資源一樣巨大。更加令人費解的是,MySQL竟然將索引和資料儲存於同一個檔案中,索引和資料之間尚存在資源爭用,不利於效能的提升。
你當然可以透過innodb_data_file_path的配置規劃多個表空間檔案,但MySQL的邏輯是“用滿後增加”,僅僅是一個檔案的拆分而已,不能從根本上分離資料和索引。
之前曾經遭遇到700G以上的表空間檔案,而且更加讓人鬱悶的是對於如此大的檔案還在以每天數G的數量增加。
由於無法停機,即便是複製一下也要花費差不多一夜,只能眼睜睜看著它繼續增大而毫無保守可行的辦法。
獨立表空間方式
相對而言對立表空間每個表都有獨立的多個資料檔案,而且做到了索引和資料的分離。
多個小檔案之間很方便的完成跨資料庫甚至跨硬體的資料複製和遷移。相對來說靈活性很好。
這樣做同樣帶來另一個方面的問題。當資料庫中的表數量達到一定級別時,每次操作所涉及的檔案過多,如果按照預設Centos的ulimit -n = 1024的話,
僅僅只能保證同時開啟256個表以內,這在習慣上“拆庫拆表”的MySQL資料結構上很難達到要求。
尚且這種資料檔案的利用率不算很高,當大量“不高”的檔案集中起來,浪費的空間也很驚人,
更何況最後可能出現的狀況不是“一堆K級別的小檔案”而是“一堆G級別的大檔案”,
有點適得其反的意思。你自然可以聯想到分割槽表,又是一個“僅僅做檔案拆分而已”,
多個分割槽檔案缺一不可。
之前同樣遇到過這個問題,MySQL連線大的狀況下大量的timeout,但主機負載還算可以,
查了一圈才知道是open files限制的問題,限制一修改,負載變得驚人,但連線數卻又提升的不多。
總之,兩種方法各有所長,部分互補,但都不是解決問題的終極方案
innodb_data_file_path=ibdata1:12M.........
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
檢視mysql啟動檔案查詢順序:
[root@test1 ~]# mysql --help
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
connect pool--->sql處理過程 --->儲存引擎 --->檔案系統
檢視系統引數:
show variables like '%key_buffer%';
檢視狀態引數:
show status like '%%';
修改全域性系統引數:
set global 引數名=值;
修改session引數:(預設)
set 引數名=值;
mysql> show variables like '%key_buffer%';
+-----------------+---------+
| Variable_name | Value |
+-----------------+---------+
| key_buffer_size | 8388608 |
+-----------------+---------+
1 row in set (0.00 sec)
mysql> show status like '%key_buffer%';
Empty set (0.00 sec)
mysql>
注意:
系統引數與狀態引數區別
key_buffer_size query_cache_size
innodb_buffer_pool_size
table_cache
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++、
引數詳解:
系統引數:
max_connections 配置mysql最大連線數
狀態引數:
max_used_connections 從mysql開機開始,歷史最大連線數
mysql> show variables like '%max_connection%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 5000 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%max_used_connections%';
Empty set (0.00 sec)
mysql> show status like '%max_used_connections%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 1 |
+----------------------+-------+
1 row in set (0.00 sec)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
系統引數:
thread_cache_size 執行緒
狀態引數:
Threads_created 執行緒建立
已建立執行緒處於一個相對穩定值,則thread_cache_size配置合適
mysql> show status like '%Threads_created%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| Threads_created | 1 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%thread_cache_size%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| thread_cache_size | 58 |
+-------------------+-------+
1 row in set (0.00 sec)
mysql>
mysqlslap -uroot -p123456 --query "select count(*) from mysql.user" -i 20 -c 300
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
系統引數:
table_open_cache
狀態引數:
open_tables 當前開啟的table數
opened_tables 歷史開啟的table數
flush tables
cashe與buffer的區別:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
系統引數:
open_files_limit
狀態引數:
open_files
opened_files
os系統方面調整: file-max
檔案控制程式碼
一般情況下,mysql資料庫,產生的資料檔案數都會多於oracle,所以對於開啟檔案數引數管理也相當重要
innodb_file_per_table 表空間
mysql的innodb的表空間,與oracle的表空間存在很大的區別:
要說表空間,Mysql的表空間管理遠遠說不上完善。換句話說,事實上Mysql根本沒有真正意義上的表空間管理。
Mysql的Innodb包含兩種表空間檔案模式,預設的共享表空間和每個表分離的獨立表空間。
只要在my.cnf裡面增加innodb_file_per_table=1就可以從共享表空間切換到獨立表空間。
當然對於已經存在的表,則需要執行alter table MY_TABLE engine=innodb命令遷移資料。
共享表空間方式
由於是預設的方式,就暫且理解為Mysql官方推薦的方式。相對而言所有的資料都在一個(或幾個)檔案中,比較利於管理,
而且在操作的時候只需要open這一個(或幾個)檔案即可,相對來說代價很低。
但問題是在資料達到以G為單位來計算的時候優劣逆轉。一個大小驚人的檔案很不利於管理,而且對於一個如此巨大的檔案來說,
讀寫它需要耗費的資源一樣巨大。更加令人費解的是,MySQL竟然將索引和資料儲存於同一個檔案中,索引和資料之間尚存在資源爭用,不利於效能的提升。
你當然可以透過innodb_data_file_path的配置規劃多個表空間檔案,但MySQL的邏輯是“用滿後增加”,僅僅是一個檔案的拆分而已,不能從根本上分離資料和索引。
之前曾經遭遇到700G以上的表空間檔案,而且更加讓人鬱悶的是對於如此大的檔案還在以每天數G的數量增加。
由於無法停機,即便是複製一下也要花費差不多一夜,只能眼睜睜看著它繼續增大而毫無保守可行的辦法。
獨立表空間方式
相對而言對立表空間每個表都有獨立的多個資料檔案,而且做到了索引和資料的分離。
多個小檔案之間很方便的完成跨資料庫甚至跨硬體的資料複製和遷移。相對來說靈活性很好。
這樣做同樣帶來另一個方面的問題。當資料庫中的表數量達到一定級別時,每次操作所涉及的檔案過多,如果按照預設Centos的ulimit -n = 1024的話,
僅僅只能保證同時開啟256個表以內,這在習慣上“拆庫拆表”的MySQL資料結構上很難達到要求。
尚且這種資料檔案的利用率不算很高,當大量“不高”的檔案集中起來,浪費的空間也很驚人,
更何況最後可能出現的狀況不是“一堆K級別的小檔案”而是“一堆G級別的大檔案”,
有點適得其反的意思。你自然可以聯想到分割槽表,又是一個“僅僅做檔案拆分而已”,
多個分割槽檔案缺一不可。
之前同樣遇到過這個問題,MySQL連線大的狀況下大量的timeout,但主機負載還算可以,
查了一圈才知道是open files限制的問題,限制一修改,負載變得驚人,但連線數卻又提升的不多。
總之,兩種方法各有所長,部分互補,但都不是解決問題的終極方案
innodb_data_file_path=ibdata1:12M.........
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29500582/viewspace-1379434/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql 效能調優 一 1MySql
- Mysql 效能調優 一 2MySql
- MySQL 效能調優技巧MySql
- Mysql 效能調優 二 1MySql
- Mysql 效能調優 二 2MySql
- MySQL效能調優"經驗"MySql
- MySQL入門--效能調優概述MySql
- mysql 效能調優五種方式MySql
- MySQL效能診斷與調優MySql
- 全棧必備——MySQL效能調優全棧MySql
- MySQL 效能調優的10個方法MySql
- Golang pprof 效能調優實戰,效能提升 3 倍!Golang
- Mysql效能優化一MySql優化
- MySQL調優效能監控之show profileMySql
- MySQL調優效能監控之performance schemaMySqlORM
- mysql效能的檢查和調優方法MySql
- MySQL效能調優my.cnf詳解MySql
- Spark學習——效能調優(一)Spark
- MySql(七):MySQL效能調優——鎖定機制與鎖優化分析MySql優化
- 技術更新!10個MySQL效能調優技巧MySql
- Spark 效能調優--資源調優Spark
- Spark 效能調優--Shuffle調優 SortShuffleManagerSpark
- 【效能調優】效能測試、分析與調優基礎
- ElasticSearch效能調優Elasticsearch
- Nginx 效能調優Nginx
- iOS效能調優iOS
- php效能調優PHP
- Java效能調優Java
- Spark效能調優Spark
- oracle效能調優Oracle
- MySQL調優MySql
- 效能調優概述,這是一篇最通俗易懂的效能調優總結
- 【MySQL】效能優化之 order by (一)MySql優化
- 效能調優學習之硬體調優
- 效能調優實戰
- 效能調優 jstackJS
- RedHat 效能調優指南Redhat
- Spark的效能調優Spark