在mysql 中輸入以下命令,可自動計算本身的當前配置最大的內存消耗mysql
語句:sql
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';數據庫
SHOW VARIABLES LIKE 'innodb_additional_mem_pool_size';windows
SHOW VARIABLES LIKE 'innodb_log_buffer_size';緩存
SHOW VARIABLES LIKE 'thread_stack';服務器
SET @kilo_bytes = 1024;tcp
SET @mega_bytes = @kilo_bytes * 1024;性能
SET @giga_bytes = @mega_bytes * 1024;優化
SET @innodb_buffer_pool_size = 2 * @giga_bytes;線程
SET @innodb_additional_mem_pool_size = 16 * @mega_bytes;
SET @innodb_log_buffer_size = 8 * @mega_bytes;
SET @thread_stack = 192 * @kilo_bytes;
SELECT
( @@key_buffer_size + @@query_cache_size + @@tmp_table_size
+ @innodb_buffer_pool_size + @innodb_additional_mem_pool_size
+ @innodb_log_buffer_size
+ @@max_connections * (
@@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size
+ @@join_buffer_size + @@binlog_cache_size + @thread_stack
) ) / @giga_bytes AS MAX_MEMORY_GB;
Linux環境下是my.cnf;可是windows環境下是my.ini
如下的配置是針對
針對my.cnf文件進行優化:
[mysqld]
skip-locking (取消文件系統的外部鎖)
skip-name-resolve (不進行域名反解析,注意由此帶來的權限/受權問題)
key_buffer_size = 256M (分配給MyISAM索引緩存的內存總數)對於內存在4GB左右的服務器該參數可設置爲256M或384M。
注意:該參數值設置的過大反而會是服務器總體效率下降!
max_allowed_packet = 4M (容許最大的包大小)
thread_stack = 256K (每一個線程的大小)
table_cache = 128K (緩存可重用的線程數)
back_log = 2000 (臨時中止響應新請求前在短期內能夠堆起多少請求,若是你須要在短期內容許大量鏈接,能夠增長該數值)
sort_buffer_size = 2M (分配給每一個線程中處理排序)
read_buffer_size = 2M (讀取的索引緩衝區大小)
join_buffer_size = 2M (分配給每一個線程中處理掃描錶鏈接及索引的內存)
myisam_sort_buffer_size = 64M (myisam引擎排序緩衝區的大小)
table_cache = 512 (緩存數據表的數量,避免重複打開表的開銷)
thread_cache_size = 64 (緩存可重用線程數,見笑建立新線程的開銷)
query_cache_size = 64M (控制分配給查詢緩存的內存總量)
tmp_table_size = 256M (指定mysql緩存的內存大小)
max_connections = 768 (最大鏈接數)指mysql整個的最大鏈接數
max_connect_errors = 10000 (最大鏈接錯誤數據)
wait_timeout = 10 (超時時間,能夠避免攻擊)
thread_concurrency = 8 (根據cpu數量來設置)
skip-bdb 禁用沒必要要的引擎
skip-networking (關閉mysql tcp/ip鏈接方式)
Log-slow-queries = /var/log/mysqlslowqueries.log
long_query_time = 4 (設定慢查詢的時間)
skip-host-cache (提升mysql速度的)
open_files_limit = 4096 (打開文件數)
interactive_timeout = 10 (服務器在關閉它前在一個交互鏈接上等待行動的秒數)
max_user_connections = 500 (最大用戶鏈接數)
key_buffer_size 默認爲218 調到128最佳
query_cache_size
tmp_table_size 默認爲16M 調到64-256最掛
innodb_thread_concurrency=8 你的服務器CPU有幾個就設置爲幾,默認爲8
table_cache=1024 物理內存越大,設置就越大.默認爲2402,調到512-1024最佳
innodb_additional_mem_pool_size=8M 默認爲2M
innodb_flush_log_at_trx_commit=0 等到innodb_log_buffer_size列隊滿後再統一儲存,默認爲1
innodb_log_buffer_size=8M 默認爲1M,默認寫日誌緩存大小,用來設置緩存大小
read_buffer_size=4M 默認爲64K
read_rnd_buffer_size 隨機讀 緩存區 默認爲256K
sort_buffer_size=32M 默認爲256K
max_connections=1024 默認爲1210
thread_cache_size=120 默認爲60
innodb_buffer_pool_size=360M 參數表示緩衝池字節大小,InnoDB緩存表和索引數據的內存區域。mysql默認的值是128M;建議值360M
innodb_log_file_size = 512M 寫入日誌文件的大小,官網文檔設置爲512M,相似於Oracle中redlog的做用,若是配置過小了將頻繁寫入影響性能
innodb_log_files_in_group = 2 指定你有幾個日誌組
performance_schema_max_table_instances=600 //檢測的表對象的最大數目
table_definition_cache=400 //緩存在frm文件中文件數量
//能夠存儲在緩存中的定義的表數量。若是您使用大量的表,您能夠建立一個大的表定義緩存,以加快表的打開。
//表定義緩存佔用較少的空間,不使用文件描述符,不像正常表緩存。最小值和默認值都是400。
table_open_cache=256 //全部線程的開放表的數目。增長這個值增長,mysqld須要文件描述符的數量
//緩存數據文件的描述符相關信息
開啓mysql慢查詢的查詢日誌:
查詢日誌相關內容:
show variables like '%quer%';
參數設置:
windows下是mysql.ini文件,Linux下是mysql.cnf文件
slow_query_log=ON //將日誌打開
slow_query_log_file="C:/ProgramData/MySQL/MySQL Server 5.6/data/mysql_slow.log"
//慢SQL語句保存的日誌文件
long_query_time=3 //慢SQL定義的時間
開啓日誌記錄文件:
set global slow_query_log='ON' //很重要,須要數據庫管理員用戶權限進行執行
對以上配置進行更改後都須要重啓mysql服務纔能有效