MySQL 性能、監控與災難恢復

jopen 11年前發布 | 95K 次閱讀 MySQL 數據庫服務器

監控方案:

    up.time    http://www.uptimesoftware.com/    收費

    Cacti        http://www.cacti.net/
    KDE System Guard(KSysGuard) 
                    http://docs.kde.org/stable/en/kdebase-workspace/ksysguard/index.html
    Gnome System Monitor
                    http://library.gnome.org/users/gnome-system-monitor/
    Nagios    http://www.nagios.org/
    Shinken  http://www.shinken-monitoring.org/  (個人覺得比nagios好用)
    Sun Management Center
                    http://www.sun.com/software/products/sunmanagementcenter/index.xml
    MySQL Enterprise Monitor
                    http://www.mysql.com/products/enterprise/monitor.html

    Linux和UNIX系統監控工具
        ps           系統進程
        top         cpu使用率排序的活動進程
        vmstat    顯示分頁、內存、塊傳輸、cpu活動相關
        uptime   顯示系統運行時間及1、5、15分鐘系統平均負載
        free         顯示內存使用率
        iostat      顯示平均磁盤活動和處理器負載    centos: yum install sysstat
        sar           系統活動報告、允許收集和報告各種系統活動
        pmap      顯示各種進程分別占用內存情況
        mpstat    多處理器系統的cpu使用率    centos: yum install sysstat
        netstat    網絡活動
        cron         定時進程執行系統(計劃任務)

設置、讀取系統變量
    SHOW [GLOBAL | SESSION] VARIABLES;
    SET [GLOBAL | SESSION]  <variable_name> = <value>;
    SET [@@global. | @@session. | @@]  <variable_name>=<value>;

    SHOW STATUS;
    SHOW SESSION STATUS;
    SHOW GLOBAL STATUS;

SQL 命令
    SHOW INDX FROM <table>    //顯示指定表的索引基數統計信息
    SHOW PLUGINS                         //顯示所有已知插件列表
    SHOW [FULL] PROCESSLIST      //顯示系統上運行的所有線程。
    SHOW  [GLOBAL | SESSION] STATUS    //顯示所有系統變量值
    SHOW  TABLE [FROM <db>]  STATUS  //顯示給定數據庫的表的詳情
    SHOW [GLOBAL | SESSION] VARIABLES  //顯示系統變量
        為了查看較少的信息,可使用  like '<pattern>'  從句,like 語句中可使用標準MySQL正則表達式符號和控制符
    SHOW ENGINE <engine_name> LOGS    //顯示指定存儲引擎的日志信息
    SHOW ENGINE <engine_name> STATUS //顯示指定存儲引擎狀態信息
    SHOW ENGINES                        //顯示所有可用的存儲引擎的列表及狀態
    SHOW BINARY LOGS                //顯示服務器二進制LOG列表
    SHOW RELAYLOG EVENTS [IN '<log_file>']  [FROM <pos>]  [LIMIT [<offset>, ] <row count>]
                                                        //僅限制查看Slave上的中繼日志
    SHOW MASTER STATUS           //顯示Master當前配置,顯示當前二進制日志文件,文件位置等
    SHOW SLAVE HOSTS                //使用--report-host 選項顯示連接到Master的slave列表
    SHOW SLAVE STATUS               //顯示復制中slave的系統狀態
    
MySQL GUI工具
    MySQL Administrator
    MySQL Query Browser
    MySQL Migration Toolkit    //用于自動從其他數據庫系統上遷移數據
    
第三方工具
    MySAR 系統活動報告
    mytop    監控線程統計信息和Mysql常規性能統計信息
    innotop   用于監控InnoDB性能和MySQL服務器
    MONyog  (MySQL Monitor and Advisor) mysql監控工具,主動監控方案
    MySQL Benchmark套件 MySQL基準測試
        ./run-all-tests --server=mysql --cmp=mysql --user=root --socket=<socket>

測量數據庫性能
    EXPLAIN   分析關于如何執行SELECT語句的信息
    ANALYZE [ LOCAL |  NO_WRUTE_TO_BINLOG ] TABLE    
        #[ LOCAL |  NO_WRUTE_TO_BINLOG ] 可防止命令寫入二進制日志。
    SHOW INDEX FROM  TABLE
    OPTIMIZE  [ LOCAL |  NO_WRUTE_TO_BINLOG ] TABLE <table_list>
        #重構一個或多個表的數據結構,整理存儲空間
    SHOW FULL PROCESSLIST;  查看所有進程信息


數據庫優化
    1、謹慎而有效的使用索引
    2、使用規范化(范式),但不要過頭
    3、使用正確的存儲引擎
            alter table t1 ENGINE=MEMORY;

提高性能的最佳實踐
    1、一切都很慢(檢查問題)
        * 檢查硬件
        * 改善硬件環境(如添加硬盤)
        * 考慮將數據遷移到獨立的磁盤上
        * 檢查操作系統配置是否正確
        * 考慮將有些應用遷移到其他服務器上
        * 考慮可以向外擴展的復制
        * 優化服務器性能

    2、慢查詢
        * 規范化數據庫模式
        * 使用EXPLAIN識別丟失的或不正確的索引
        * 使用benchmark() 函數測試部分查詢
        * 考慮重寫查詢
        * 對標準查詢使用視圖
        * 啟用Query Cache

    3、慢應用
        * 開啟 Query Cache
        * 考慮并優化存儲引擎
        * 確認是否是服務器或操作系統的問題
        * 定義應用程序的基準,并將它與已知基準比較
        * 檢查內部(在應用程序 內部編寫的)查詢,并最大化他們的性能
        * 分而治之——一次只檢查一個部分
        * 使用劃分類分散數據
        * 檢查各個分區的索引

    4、慢復制
        * 確保網絡運行狀況最佳
        * 確保服務器配置正確
        * 優化數據庫
        * 限制 Master 的更新
        * 將數據讀取劃分到多個Slave中
        * 檢查Slave 的復制延遲
        * 定期維護日志(二進制日志和中繼日志)
        * 在帶寬有限的情況下,使用壓縮
        * 使用包容性和排他性日志選項,最小化復制內容


數據引擎的優化和監控
    MyISAM實用工具
        * myisam_ftdump: 顯示全文索引信息
        * myisamchk : 執行MyISAM 表的分析(只能在脫機狀態使用)
        * myisamlog : 查看MyISAM 表的更改日志
        * myisampack:壓縮表以減少存儲量

    Key Cache
        1、預加載Key Cache
            #將salary表的索引加載到key cache中,ignore leaves: 表明只加載索引的非葉子節點,可通過修改表的方式從Key cache中移除相關索引
            mysql> load index into cache salaries ignore leaves;
        2、使用多個Key Cache
            #使用耳機主緩存
            mysql> set global emp_cache.key_buffer_size = 128*1024; //128K
            mysql> cache index salaries in emp_cache;
            mysql> set global emp_cache.key_buffer_size=0;

            #確認一個二級緩存是否存在
            mysql> select @@global.emp_cache.key_buffer_size;
            重啟而不丟失二級緩存配置的方式:將配置語句保存在一個文件中,使用mysql的配置文件的[mysqld]部分的 init-file=<patch_to_file>命令執行該文件。

來自:http://blog.csdn.net/hellyhe/article/details/8288696
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!