首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Monty 談 MySQL 優化(一):全維度優化視野與硬體/磁碟/OS/編譯器選擇指南

     編輯:MySQL 資料庫相關知識

一、可優化的五大維度

  • 硬體
  • 作業系統/函式庫
  • SQL 服務器 (設定與查詢)
  • 應用程式介面 (API)
  • 應用程式

二、優化硬體

  • 龐大表 (>2GB) 應考慮 64 位架構 (Alpha/Sparc/IA64),MySQL 內部大量用 64 位整數
  • 大資料庫優化優先序:RAM → 快速磁碟 → CPU 能力
  • 更多記憶體 → 熱門鍵值頁面留記憶體 → 加速鍵值更新
  • 非事務安全表或大表避免長檢查時,UPS 可保電源故障安全關機
  • 專用資料庫服務器建議 1Gb 乙太網,延遲與吞吐同等重要

三、優化磁碟

  • 系統/程式/暫存檔用專用磁碟;大量修改時更新日誌/事務日誌上專用磁碟
  • 低尋道時間對資料庫磁碟關鍵。大表尋道次數估算:log(行數)/log(索引塊長度/3*2/(鍵值長度+資料指標長度))+1。50萬行表索引 Mediumint 約 4 次尋道,索引約 5.2MB。實際多數塊被快取,約 1-2 次尋道
  • 寫入需 4 次尋道找位置 + 2 次更新索引寫入行
  • 極大資料庫受磁碟尋道速度限制,隨資料量 N log N 遞增
  • 資料庫/表分不同磁碟 (MySQL 用符號鏈接)
  • RAID 0 提升讀寫吞吐;RAID 0+1 更安全且提升讀吞吐,寫吞吐略降
  • 臨時檔/易重建資料磁碟勿用鏡像/RAID (除 RAID 0)
  • Linux 啟動時 hdparm -m16 -d1 啟用多扇區讀寫與 DMA,回應提升 5-50%
  • Linux 掛載用 async (預設) 和 noatime
  • 特定應用可用記憶體磁碟給特定表,但通常不必要

四、優化作業系統

  • 禁用交換區:記憶體不足應加記憶體或配置少用記憶體
  • 禁用 NFS 磁碟 (NFS 鎖定問題)
  • 增加系統與 MySQL 開啟檔案數 (safe_mysqld 加 ulimit -n #)
  • 增加系統程序與執行緒數量
  • 少量大表時告訴檔案系統別將檔案分散不同磁軌 (Solaris)
  • 用支援大檔案的檔案系統 (Solaris)
  • 選擇檔案系統:Linux 上 ReiserFS 開啟/讀寫極快,檢查僅需數秒

五、選擇應用程式介面 (API)

API優點缺點/注意
Perl DBI/DBD跨 OS/DB 可移植、適合快速原型必用 DBI/DBD 介面
PHP比 Perl 易學、資源佔用少、PHP4 更快-
C (原生)最快、控制力最強底層、開發成本高
C++高層、開發效率高仍在開發中
ODBCWin/Unix、幾乎跨 DB 可移植較慢 (比原生慢 19%)、方法多易錯、問題多、MS 偶爾改介面、未來不明 (MS 推 OLE)
JDBC理論跨 OS/DB、可跑 Web 客戶端-
Python/其他可能不錯未使用經驗
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved