優化原則:
內存裡的數據要比磁盤上的數據訪問起來快;
站數據盡可能長時間地留在內存裡能減少磁盤讀寫活動的工作量;
讓索引信息留在內存裡要比讓數據記錄的內容留在內存裡更重要。
針對以上幾個原則,我們應該調整服務器:
增加服務器的緩存區容量,以便數據在內存在停留的時間長一點,以減少磁盤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機制必須依賴動態庫才能實現。
為了提高數據運行速度,升級硬件是最直接的解決方案。針對數據庫應用的特點,在升級硬件時應考慮以下內容:
對於數據庫服務器,內存是最重要的一個影響性能因素。通過加大內存,數據庫服務器可把更多的數據保存在緩沖區,可大大減少磁盤I/O,從而提升數據庫的整體性能。
配置高速磁盤系統,以減少讀盤的等待時間,提高響應速度。
合理分布磁盤I/O,應把磁盤I/O分散在多個設備上,以減少資源競爭,提高並行操作能力。
配置多處理器,MySQL是多線程的數據庫,多處理器可同時執行多個線程。