mysql 優化 mysql

1. 服務器優化

優化原則:

內存裏的數據要比磁盤上的數據訪問起來快;

站數據儘可能長時間地留在內存裏能減少磁盤讀寫活動的工作量;

讓索引信息留在內存裏要比讓數據記錄的內容留在內存裏更重要。

針對以上幾個原則,我們應該調整服務器:

增加服務器的緩存區容量,以便數據在內存在停留的時間長一點,以減少磁盤I/0。下面介紹幾個重要的緩衝區:

數據表緩衝區存放着與打開的數據表相的信息,它的大小可由服務器參數“table_cache”設置。Opened_tables參數記錄服務器進行過多少次數據表打開操作,如果該值變化很大,就可能是數據表緩衝區已滿,需把一些不常用的表移出緩衝區,以騰出空打開新的數據表。可用以下命令查看Opened_tables的值:

SHOW STATUS LIKE 'Opened_tables';
在MyISAM和ISAM數據表中,索引被緩存在“key buffer”裏,它的大小由服務器參數“key_buffer_size”來控制。系統默認的大小是8M,如果內存充足的話可適當擴大該值,以使更多索引塊緩存在該區裏,以加快索引的速度。

InnoDB和BDB數據表也各有一個緩衝區,分別叫innodb_buffer_pool_size和bdb_cache_size。InnoDB還有一個日誌緩衝區叫innodb_log_buffer_size。

自4.0.1開始,MySQL多了一個緩衝區,叫查詢緩衝區,主要用來存放重複執行的查詢文本和結果,當再次遇到相同的查詢,服務器會直接從緩衝區中返回結果。該功能是內建的功能,如不想支持該功能,可在編譯服務器時用configure腳本的--without-query-cache選項去掉該功能。

查詢緩衝區由三個服務器參數控制,分別是:

1、query_cache_size   
控制緩衝區的大小,如果該值爲0,則禁用查詢緩衝功能。設置方法是在選項文件中設置:
[mysqld]
set-variable = query_cache_size = 16M    
這樣就設置了一個16M的查詢緩衝區

2、query_cache_limit
緩衝結果集的最大容量(以字節爲單位),如果查詢的結果集大於該值,則不緩衝該值。

3、query_cache_type
緩衝區的操作模式。
0表示不進行緩衝;
1表示除SELECT SQL_NO_CACHE開頭的查詢外,其餘的都緩衝;
2表示只對以SELECT SQL_ON_CACHE開頭的查詢進行緩衝。
默認情況下,按服務器的設置進行緩衝,但客戶端也可通過命令改變服務器設置。客戶端可直接用SELECT SQL_NO_CACHE和SELECT SQL_CACHE命令來要求服務器緩衝或不緩衝查詢結果。如果不想每條查詢都寫參數,我們也可在客戶端用SET SQL_QUERY_CACHE_TYPE = val;來改變服務器的查詢緩衝行爲。val可取值0,1,2或OFF,ON,或DEMAND。

禁用用不着的數據表處理程序。如服務器是從源碼創建,就可徹底禁用ISAM,InnoDB和BDB數據表。

權限表裏的權限關係應儘可能簡單,當然了,是要在保證安全的前提下。

在從源碼創建服務器時,儘量使用靜態庫而不是共享庫來完成其配置工作。靜態庫的執行速度更快,但如果要加載用戶定義函數(UDF)的話,就不能使用靜態庫,因爲UDF機制必須依賴動態庫才能實現。

2. 硬件優化

爲了提高數據運行速度,升級硬件是最直接的解決方案。針對數據庫應用的特點,在升級硬件時應考慮以下內容:

對於數據庫服務器,內存是最重要的一個影響性能因素。通過加大內存,數據庫服務器可把更多的數據保存在緩衝區,可大大減少磁盤I/O,從而提升數據庫的整體性能。

配置高速磁盤系統,以減少讀盤的等待時間,提高響應速度。

合理分佈磁盤I/O,應把磁盤I/O分散在多個設備上,以減少資源競爭,提高並行操作能力。

配置多處理器,MySQL是多線程的數據庫,多處理器可同時執行多個線程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章