歡迎使用CSDN-markdown編輯器

MySQL數據庫的性能的影響

一. 服務器的硬件的限制

二. 服務器所使用的操作系統

三. 服務器的所配置的參數設置不同

四. 數據庫存儲引擎的選擇

五. 數據庫的參數配置的不同

六. (重點)數據庫的結構的設計和SQL語句


1). 服務器的配置和設置(cpu和可用的內存的大小)

 1.網絡和I/O資源 
 2.cpu的主頻和核心的數量的選擇
 (對於密集型的應用應該優先考慮主頻高的cpu)
 (對於併發量大的應用優先考慮的多核的cpu)
 3.磁盤的配置和選擇
 (使用傳統的機械硬盤:
    特點:讀寫較慢、存儲空間大、最常見、使用最多、價格低;
    工作過程:移動磁頭到磁盤表面上的正確位置;
             等待磁盤的旋轉,使得所得所需的數據在磁頭之下;
             等待磁盤旋轉過去,所有所需的數據都被磁頭讀出
    選擇因素:存儲容量、傳輸速度、訪問時間、主軸轉速、物理尺寸)
 (使用RAID增強傳統的機器硬盤的性能:
    特點:利用小的磁盤組成大的磁盤並提供數據的冗餘保證數據的完整性的技術
    數據庫中所使用的RAID的級別:
        RAID0級別、RAID1級別、RAID5級別[分佈式奇偶校驗磁盤陣列]、RAID10[分片的鏡像(數據庫最好的方式)]
    RAID級別選擇:如下圖)
 (使用固態存儲的SSD和PCI-E卡:
    特點:相對於機械盤固態磁盤有更好的隨機讀寫性能;
         相對於機械固態磁盤能更好的支持併發;
         相對於機械固態磁盤更容易損壞
    SSD:使用SATA接口可以替換傳統的磁盤而不需要任何的改變[受到接口的速度的限制];
        SATA接口的SSD同樣支持RAID技術
    PCI-E卡(Fusion-IO卡):無法使用在SATA接口[需要使用獨特的驅動和配置];
                         價格貴,使用了cpu的資源和內存
    使用的場景:適用於存在大量的隨機I/O的場景;
              適用於解決單線程負載的I/O瓶頸)
 (使用網絡存儲NAS和SAN:
    SAN[光纖接入服務器]:大量順序讀寫操作、讀寫I/O、緩存、I/O合併、隨機讀寫慢(不如本地的RAID)
    NAS設備使用網絡連接,基於文件的協議如NFS或者SMB來訪問
    適合場景:數據庫的備份、)

使用RAID增強傳統的機器硬盤的性能->RAID0級別使用RAID增強傳統的機器硬盤的性能->RAID1級別使用RAID增強傳統的機器硬盤的性能->RAID5級別

不同REAID級別的對比:

注意事項:

 1.64位數據庫的版本使用32位的服務器的版本
 2.內存的主頻的選擇主板所能支持的最大內存的頻率
總結:
    對於cpu:
        1.64位的cpu一定能夠要工作在64位的系統下
        2.對於併發比較高的場景cpu的數量比頻率重要
        3.對於cpu密集型的場景和複雜SQL則頻率越高越好
    對於內存:
        1.選擇主板所能使用的最高頻率的內存
        2.內存的大小對性能很重要,所以儘可能的大
    I/O子系統:
        1.PCIe -> SSD -> RAID10 -> 磁盤 -> SAN

2). 操作系統對性能的影響

Windows、FreeBSD、Solaris、Linux
centos的參數優化的設置:
    (1)內核相關的參數(/etc/sysctl.conf)
        net.core.somaxconn = 65535
        net.core.netdev_max_backlog = 65535
        net.ipv4.tcp_max_syn_backlog = 65535

        net.ipv4.tcp_fin_timeout = 10
        net.ipv4.tcp_tw_reuse = 1
        net.ipv4.tcp_tw_recycle = 1

        net.core.wmem_defaullt = 87380
        net.core.wmem_max = 16777216
        net.core.rmem_defaullt = 87380
        net.core.rmem_max = 16777216

        net.ipv4.tcp_keepalive_time = 120
        net.ipv4.tcp_keepalive_intvl = 30
        net.ipv4.tcp_keepalive_probes = 3

        kernel.shmmax = 4294967295
        vm.swappiness = 0
    (2)增加資源限制(/etc/security/limit.conf)
        * soft nofile 65535
        * hard nofile 65535
            * 表示對所有的用戶有效
            soft 指的是當前系統的生效的設置
            hard 表明系統中所能設定的最大值
            nofile 表示所限制的資源是打開文件的最大數目
            65535 就是限制的數量
    (3).磁盤調度策略(/sys/block/devname/queue/scheduler)
        noop(電梯式調度策略)、deadline(截止時間調度策略)、anticipatory(預料I/O調度策略)
        cat /sys/block/sda/queue/scheduler
        noop anticipatory deadline [cfq]

            echo deadline > /sys/block/sda/queue/scheduler

3).MySQl的數據庫的體系

MySQl的數據庫的體系

4).MySQl的數據庫的存儲引擎

(1).Mysql之存儲引擎MyISAM
    組成的結構:表爲MYD和MYI、frm的文件組成
    特性:併發性和鎖級別
         MyISAM表支持索引類型
         MyISAM表支持數據的壓縮(命令行:myisampack)
            myisampack -b -f myIsam.MYI;
            壓縮後的表不能進行寫操作,只能進行讀操作
    修復:對數據庫中的表進行檢查並修復:
        check table mytable;
        repair table mytable;

        myisamchk工具,修復時數據庫服務必須停止
    限制:使用MySQL5.0之前時默認表的大小4G(存儲大表修改MAX_Rows和AVG_ROW_LENGTH)
         使用MySQL5.0之後的版本默認支持256TB
    適用的場景:非事務型的應用
              只讀類的應用
              空間類的應用(GPS的數據)
(2).Mysql之存儲引擎InnoDB
    mysql5.5.8之後版本默認使用的存儲引擎
    組成結構:通過設置innodb_file_per_table參數存儲的位置不同
                ON:獨立表空間:tablename.ibd
                OFF:系統表空間:ibdataX
    建議:對於mysql中建議使用InnoDB的獨立表空間
    特性:事務性存儲引擎
         完全支持事務的存儲引擎
         Redo log(存儲已經提交的事務)和Undo log(存儲未提交的事務)

         InnoDB支持行級別鎖
         最大程序的支持併發
         行級別的鎖是由存儲引擎層實現的
    鎖:共享鎖(讀鎖)、獨佔鎖(寫鎖)
        表級鎖、行級鎖
        阻塞:確保事務併發的正常的執行
        死鎖:兩個或者兩個以上的事務執行過程中相互等待對方的資源而產生的一種異常
    InnoDB狀態檢查:
        show engine innodb status;  
    適用場景:InooDB適用於大多數OLTP應用
(3).Mysql之存儲引擎CSV
    特點:數據以文本的方式存儲在文件中
        .CSV文件存儲表的內容
        .CSM文件存儲表的元數據如表的狀態和數據量
        .frm文件存儲表的結構的信息
        以CSV格式進行數據的存儲
        所有的列必須不能爲NULL的
        不支持索引(不適合大表,不適合在線處理)
        可以對數據文件直接進行編輯
    適用的場景:適合作爲數據交換的中間表
              mysql數據目錄->csv文件->其他web程序
              excel電子表格 -> csv文件 -> mysql數據目錄
(4).Mysql之存儲引擎Archive
    特點:以zlib對錶數據進行壓縮,磁盤I/O更少
         數據存儲在ARZ爲後綴的文件中

         只支持insert和select操作
         只支持在自增的ID列上加索引
    適用場景:
         日誌和數據採集類的應用
(4).Mysql之存儲引擎Memory
    特點:數據只保存在內存中
         Memory存儲引擎的I/O效率特別高
         支持HASH索引和BTree索引
         所有的字段爲固定長度
         不支持BLOG和TEXT等大字段

         Memory存儲引擎使用表級鎖
         表中存儲數據的最大值由max_heap_table_size參數決定
    適用場景:用於查找或者映射表,例如郵編和地區
             用於保存數據分析產生的中間表
             用於緩存週期性聚合數據的結果表

5).MySQl的數據庫的服務器參數

(1).Mysql配置參數作用域
    全局參數 
        set global 參數名=參數值;
        set @@global.參數名:=參數值;
    會話參數
        set[session] 參數名=參數值;
        set @@session.參數名:=參數值;
(2).內存配置相關的參數
        確定可以使用的內存的上限
        確定MySQL的每個連接使用的內存
            sort_buffer_size join_buffer_size
            read_buffer_size read_rnd_buffer_size
        確定需要爲操作系統保留多少內存
        如何爲緩存池分配內存
            Innodb_buffer_pool_size
            總內存-(每個線程鎖需要的內存*連接數)- 系統的保留內存
            key_buffer_size
(3).I/O相關配置參數
        InnoDb存儲引擎的I/O參數設置:
        Innodb_log_file_size
        Innodb_log_file_in_group
        Innodb_log_buffer_size
        Innodb_flush_log_at_trx_commit

        Innodb_flush_method = O_DIRECT
        Innodb_file_per_table = 1
        Innodb_doublewrite = 1
      MySIAM存儲引擎的I/O參數設置:
        delay_key_write
            OFF:每次操作後刷新鍵緩衝中的髒塊到磁盤
            ON:只對在鍵表時指定了delay_key_write選項的表使用延遲刷新
            ALL:對所有MYSIAM表都使用延遲鍵寫入
(4).安全相關配置參數
        expire_logs_days 指定自動清理binlog的天數
        max_allowed_packet 控制MySQL可以接受的包的大小(32M)
        skip_name_resolve 禁用DNS查找

        sysdate_is_now 確保sysdate()返回確定性的日期
        read_only 禁止非super權限的用戶寫權限
        skip_slave_start 禁止Slave自動恢復
        sql_mode 設置MySQL所使用的SQL模式
            strict_trans_tables
            no_engine_subtitutoion
            no_zero_date
            no_zero_in_date
            only_full_group_by
(5).其他相關配置參數
        sync_binlog = 1控制MySQL如何向磁盤刷新binlog
        tmp_table_size和max_heap_table_size 控制內存臨時表的大小(設置一致)
        max_connections = 2000 控制允許的最大連接數

5).MySQl的數據庫的結構設計和SQL的優化

(1).過分的反範式化爲表的建立太多的列
(2).過分的範式化造成太多的表關聯
(3).在OLTP環境中使用不恰當的分區表
(4).使用外鍵保證數據的完整性

性能優化的順序

  • 數據庫結構設計和SQL語句優化
  • 數據庫的存儲引擎的選擇和參數的配置
  • 系統的選擇及其優化
  • 硬件升級
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章