每張表數據最好不要超過2000W 條數據
超過之後分表存儲,分庫存儲
一個實例oracle一時打開一個數據庫
一個實例mysql一時打開多個數據庫
按對數據調優影響從高到低依次爲:
數據庫的設計與規劃
數據的引用(sql)
mysql服務優化,內存磁盤的使用
操作系統優化
升級硬件設備
數據庫的設計與規劃:
事務處理用innodb引擎。
非事務處理用myIsam
mysql版本的影響。
儘量採取優化算法
建立合適的索引
插入,修改,刪除數據的時候,索引是最大的瓶頸。
所以如果要導入數據的時候就刪除索引。
所用exists少用in
儘量避免使用is null,所以經常不要允許爲null,設置默認值。
mysql內存配置:
my.ini
query_cache_size:
table_case:
磁盤io規劃:
raid技術:
-raid 0+1
raid 0
raid 5
swap分區的使用
-最好使用單獨的raid0 分區
磁盤分區
--磁盤讀取分流
數據讀寫特別大庫文件放到多個磁盤上。
一個庫放在一個分區上。
操作系統的優化
優化網絡:
linu 採用bonding技術
優化系統內核:
--優化系統tcp連接
--優化系統打開文件的最大限制
關閉不必要的服務
第二章優化mysql服務
show status;
show variables;
show processlist;
show warnings;
show errors;
啓動mysql慢速查詢日誌:
log-slow-queries = /new/log.log
long-query-time=5
log-queries-not-using-indexes mysql4.1以後的版本有效
通過mysqldumpslow命令制定日誌文件的路徑進行查看
對查詢進行緩存
緩存的大小不是越大越好,也不是越少越好。適當最好。
查詢命中率越高越好
對mysql資源進行強制配置:
max_connections //最大連接數 一般1000
wait_timeout //空閒多長時間後斷開鏈接
max_connect_errors //最大的錯誤鏈接數 一般設置爲2001
表的告訴緩存:
table_cache //緩存表的數量
open_tables //已經打開表的數量
opened_tables //需要打開表的數量 越大 表示 table_cache 設置的小了
加size表示的空間大小,不加的表示個數
thread_cache
threads_created //線程的創建數量,越大表示thread_cache 設置的小了。
關鍵字緩衝區
key_buffer_size
key_read_requests //請求的總數
key_reads //命中磁盤的請求個數
key_read_requests / key_reads = 100/1 表示需要增加key_buffer_zise
key_read_requests / key_reads = 1000/1 表示比key_buffer_size大小比較合適
命中率: (key_read_requests - key_reads) / key_read_requests
臨時表的大小,內存區域,用於存放臨時表,不是程序員操作的,
是mysql引擎自動的需要創建的。
tmp_table_size
created_tmp_table //創建tmp表的數量
created_temp_disk_table //創建tmp磁盤表的數量,數量不斷增加,表示tmp_table_size
查詢的兩種方式
select_scan
select_range
排序緩衝區
sort_buffer_size
sort_range
sort_rows
sort_merge_passes //次數,磁盤內容合併次數,越大,表示sort_buffer_size需要增加
sort_buffer_size也不是越大越好。
mysql調優工具。
mytop
http://jeremy.zawodny.com/mysql/mytop
mytop -u username -p passwor
mysqlard
mysqlreport
mysqlslap 是myslq官方提供的壓力測試工具 mysql 5.1以後。
phpmyadmin
日常維護小技能
安全是第一位。之後再討論效率
myisam備份方法
mysqlhotcopy:拷貝數據文件到制定的目錄,先鎖着,再解鎖。不適合很繁忙的時候備份
數據不會丟,很方便
mysqldump: 先鎖着,通過sql語句方式,生成sql語句。
最好每張表每張sql,不要一個庫一個sql,否則會很大的sql文件
innodb備份文件
mysqldump
innodb hot backup 非免費。
二進制恢復2
二進制日誌 binlog
-mysqlbinlog
直接備份數據文件
flush tables with read lock 直接拷貝數據文件。
本文來自:Linux學習教程網