程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql數據庫調優

mysql數據庫調優

編輯:關於MYSQL數據庫

key_buffer_size 索引緩沖區的長度,值越大,對數據庫裡有索引的數據進行訪問的速度就越快。在專用的數據庫服務器上,可將這個選項的值設為RAM內存的1/4。

table_cache 可同時打開的數據表的個數。打開和關閉數據表需要花費時間,所以這個值越大,可以同時訪問的數據表就越多。這個值受到系統內存,和操作系統的限制。MySQL服務器當前打開數據表的個數可以用show status命令查看。(對應的是open_tables系統變量)

bulk_insert_buffer_size 一次插入多條記錄的insert命令使用的緩沖區的長度。

MySQL支持的鎖:

表級,行級鎖,鎖的粒度越小,並發性越好,但是系統開銷變大,不同的引擎,支持不同類型的鎖,這個特性很好。

事務日志:

直接更改內存中的數據,不寫盤,但是將數據寫入日志,因為日志為順序寫,所以極大的提高了速度,也便於崩潰時可以恢復。(write_ahead_logging)

InnoDB uses its log to convert this random disk I/O into sequential I/O. Once the log is safely on disk, the transactions are permanent, even though the changes haven’t been written to the data files yet. If something bad happens (such as a power failure), InnoDB can replay the log and recover the committed transactions. --Innodb通過原始的數據文件+事務日志,即可重做生成正確的數據. Of course, InnoDB does ultimately have to write the changes to the data files, because the log has a fixed size. It writes to the log in a circular fashion: when it reaches the end of the log, it wraps around to the beginning. ---事務日志是被循環利用的It can’t overwrite a log record if the changes contained there haven’t been applIEd to the data files, because this would erase the only permanent record of the committed transaction. ---隨意重用了事務日志將會非常危險.
    InnoDB uses a background thread to flush the changes to the data files intelligently.This thread can group writes together and make the data writes sequential, for improved efficiency. In effect, the transaction log converts random data file I/O into mostly sequential log file and data file I/O. Moving flushes into the background makes querIEs complete more quickly and helps cushion the I/O system from spikes in the query load.--後台flush 進程有利於緩沖IO.The overall log file size is controlled by innodb_log_file_size and innodb_log_files_in_group, and it’s very important for write performance. The total size is the sum of each file’s size. By default there are two 5 MB files, for a total of 10 MB. This is not enough for a high-performance workload. The upper limit for the total log size is 4 GB, but typical sizes for extremely write-intensive workloads are only in the hundreds of megabytes (perhaps 256 MB total).

InnoDB uses multiple files as a single circular log. You usually don’t need to change the default number of logs, just the size of each log file. To change the log file size, shut down MySQL cleanly, move the old logs away, reconfigure, and restart. Be sure MySQL shuts down cleanly, or the log files will actually have entries that need to be applIEd to the data files! Watch the MySQL error log when you restart the server. After you’ve restarted successfully, you can delete the old log files.----事務日志對innodb的恢復很重要,所以要確保innodb是gracefully shutdown

使用innodb的事務日志,可以極大的提高插入有索引的表的速度

這是關於事務日志的一些設置

long_query_time = n 慢查詢的執行用時上限(默認設置是10s)。
long_queries_not_using_indexs 把慢查詢以及執行時沒有使用索引的查詢命令全都記入日志(其余同--log-slow-querIEs選項)。
log-bin [= filename] 把對數據進行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二進制格式記入日志(二進制變更日志,binary update log)。這種日志的文件名是filename.n或默認的hostname.n,其中n是一個6位數字的整數(日志文件按順序編號)。
log-bin-index = filename 二進制日志功能的索引文件名。在默認情況下,這個索引文件與二進制日志文件的名字相同,但後綴名是.index而不是.nnnnnn。

多版本並發,innodb支持這個,並發性最好,但是開銷也是最大的。

show table status;//查看表使用的引擎

不要輕易相信myISAM引擎比INNODB快,在聚集索引,將數據裝入內存的應用,Innodb比MYISAM快

innodb 事務日志:
1.1G -rw-rw---- 1 mysql MySQL 1.0G Sep 20 15:23 ib_logfile0
1.1G -rw-rw---- 1 mysql MySQL 1.0G Sep 18 22:53 ib_logfile1

作用:1.確保大事務可順利完成 2.系統崩潰後對innodb數據表進行恢復~

出於加快操作速度考慮,MySQL總是對內存中的數據進行修改,等積攢到一定程度後才寫入硬盤數據文件。( 對innodb來說是表空間)。

innodb日志是按順序寫的,當最後一個log文件寫滿後即輪換對第一個日志文件寫。

事務日志只在MySQL服務器正在運行時是必須的,正常關機後,這些內容已寫入磁盤中,因此也沒有用了。所以在備份innodb時,可不用復制innodb 日志文件。

[MySQLd]

innodb_data_home_dir = /data/ibdata
innodb_log_group_home_dir=/data/iblogs
innodb_log_files_in_group = 2 #3
innodb_file_per_table=1
innodb_additional_mem_pool_size = 64M #16M
innodb_buffer_pool_size = 12G #up to 80% mem
#innodb_data_file_path = ibdata1:10M:autoextend
innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
innodb_flush_log_at_trx_commit = 0 #1 ,0 is fast
innodb_log_buffer_size = 32M #8M
innodb_log_file_size = 1G #256M

MYISAM默認並不支持聚集索引,只是一般的索引,速度顯然不夠快,

innodb默認就是聚集索引,速度很快

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved