MySQL數(shù)據(jù)庫(kù)的性能的影響分析及其優(yōu)化

MySQL數(shù)據(jù)庫(kù)的性能的影響

一. 服務(wù)器的硬件的限制

二. 服務(wù)器所使用的操作系統(tǒng)

三. 服務(wù)器的所配置的參數(shù)設(shè)置不同

四. 數(shù)據(jù)庫(kù)存儲(chǔ)引擎的選擇

五. 數(shù)據(jù)庫(kù)的參數(shù)配置的不同

六. (重點(diǎn))數(shù)據(jù)庫(kù)的結(jié)構(gòu)的設(shè)計(jì)和SQL語(yǔ)句

1). 服務(wù)器的配置和設(shè)置(cpu和可用的內(nèi)存的大小)

1.網(wǎng)絡(luò)和I/O資源

2.cpu的主頻和核心的數(shù)量的選擇

(對(duì)于密集型的應(yīng)用應(yīng)該優(yōu)先考慮主頻高的cpu)

(對(duì)于并發(fā)量大的應(yīng)用優(yōu)先考慮的多核的cpu)

3.磁盤(pán)的配置和選擇

(使用傳統(tǒng)的機(jī)械硬盤(pán):

特點(diǎn):讀寫(xiě)較慢迅箩、存儲(chǔ)空間大吆倦、最常見(jiàn)育特、使用最多、價(jià)格低;

工作過(guò)程:移動(dòng)磁頭到磁盤(pán)表面上的正確位置;

等待磁盤(pán)的旋轉(zhuǎn)坛怪,使得所得所需的數(shù)據(jù)在磁頭之下;

等待磁盤(pán)旋轉(zhuǎn)過(guò)去,所有所需的數(shù)據(jù)都被磁頭讀出

選擇因素:存儲(chǔ)容量尘盼、傳輸速度偷办、訪(fǎng)問(wèn)時(shí)間、主軸轉(zhuǎn)速匆骗、物理尺寸)

(使用RAID增強(qiáng)傳統(tǒng)的機(jī)器硬盤(pán)的性能:

特點(diǎn):利用小的磁盤(pán)組成大的磁盤(pán)并提供數(shù)據(jù)的冗余保證數(shù)據(jù)的完整性的技術(shù)

數(shù)據(jù)庫(kù)中所使用的RAID的級(jí)別:

RAID0級(jí)別劳景、RAID1級(jí)別、RAID5級(jí)別[分布式奇偶校驗(yàn)磁盤(pán)陣列]碉就、RAID10[分片的鏡像(數(shù)據(jù)庫(kù)最好的方式)]

RAID級(jí)別選擇:如下圖)

(使用固態(tài)存儲(chǔ)的SSD和PCI-E卡:

特點(diǎn):相對(duì)于機(jī)械盤(pán)固態(tài)磁盤(pán)有更好的隨機(jī)讀寫(xiě)性能;

相對(duì)于機(jī)械固態(tài)磁盤(pán)能更好的支持并發(fā);

相對(duì)于機(jī)械固態(tài)磁盤(pán)更容易損壞

SSD:使用SATA接口可以替換傳統(tǒng)的磁盤(pán)而不需要任何的改變[受到接口的速度的限制];

SATA接口的SSD同樣支持RAID技術(shù)

PCI-E卡(Fusion-IO卡):無(wú)法使用在SATA接口[需要使用獨(dú)特的驅(qū)動(dòng)和配置];

價(jià)格貴,使用了cpu的資源和內(nèi)存

使用的場(chǎng)景:適用于存在大量的隨機(jī)I/O的場(chǎng)景;

適用于解決單線(xiàn)程負(fù)載的I/O瓶頸)

(使用網(wǎng)絡(luò)存儲(chǔ)NAS和SAN:

SAN[光纖接入服務(wù)器]:大量順序讀寫(xiě)操作盟广、讀寫(xiě)I/O、緩存瓮钥、I/O合并筋量、隨機(jī)讀寫(xiě)慢(不如本地的RAID)

NAS設(shè)備使用網(wǎng)絡(luò)連接烹吵,基于文件的協(xié)議如NFS或者SMB來(lái)訪(fǎng)問(wèn)

適合場(chǎng)景:數(shù)據(jù)庫(kù)的備份、)

使用RAID增強(qiáng)傳統(tǒng)的機(jī)器硬盤(pán)的性能->RAID0級(jí)別

使用RAID增強(qiáng)傳統(tǒng)的機(jī)器硬盤(pán)的性能->RAID1級(jí)別

使用RAID增強(qiáng)傳統(tǒng)的機(jī)器硬盤(pán)的性能->RAID5級(jí)別

不同REAID級(jí)別的對(duì)比:

注意事項(xiàng):

1.64位數(shù)據(jù)庫(kù)的版本使用32位的服務(wù)器的版本

2.內(nèi)存的主頻的選擇主板所能支持的最大內(nèi)存的頻率

總結(jié):

對(duì)于cpu:

1.64位的cpu一定能夠要工作在64位的系統(tǒng)下

2.對(duì)于并發(fā)比較高的場(chǎng)景cpu的數(shù)量比頻率重要

3.對(duì)于cpu密集型的場(chǎng)景和復(fù)雜SQL則頻率越高越好

對(duì)于內(nèi)存:

1.選擇主板所能使用的最高頻率的內(nèi)存

2.內(nèi)存的大小對(duì)性能很重要桨武,所以盡可能的大

I/O子系統(tǒng):

1.PCIe -> SSD -> RAID10 -> 磁盤(pán) -> SAN

2). 操作系統(tǒng)對(duì)性能的影響

Windows肋拔、FreeBSD、Solaris呀酸、Linuxcentos的參數(shù)優(yōu)化的設(shè)置:? ? (1)內(nèi)核相關(guān)的參數(shù)(/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? ? ? ? ? ? * 表示對(duì)所有的用戶(hù)有效? ? ? ? ? ? soft 指的是當(dāng)前系統(tǒng)的生效的設(shè)置? ? ? ? ? ? hard 表明系統(tǒng)中所能設(shè)定的最大值? ? ? ? ? ? nofile 表示所限制的資源是打開(kāi)文件的最大數(shù)目? ? ? ? ? ? 65535 就是限制的數(shù)量? ? (3).磁盤(pán)調(diào)度策略(/sys/block/devname/queue/scheduler)? ? ? ? noop(電梯式調(diào)度策略)凉蜂、deadline(截止時(shí)間調(diào)度策略)、anticipatory(預(yù)料I/O調(diào)度策略)? ? ? ? cat /sys/block/sda/queue/scheduler? ? ? ? noop anticipatory deadline [cfq]echodeadline > /sys/block/sda/queue/scheduler

3).MySQl的數(shù)據(jù)庫(kù)的體系

MySQl的數(shù)據(jù)庫(kù)的體系

4).MySQl的數(shù)據(jù)庫(kù)的存儲(chǔ)引擎

(1).Mysql之存儲(chǔ)引擎MyISAM? ? 組成的結(jié)構(gòu):表為MYD和MYI性誉、frm的文件組成? ? 特性:并發(fā)性和鎖級(jí)別? ? ? ? MyISAM表支持索引類(lèi)型? ? ? ? MyISAM表支持?jǐn)?shù)據(jù)的壓縮(命令行:myisampack)? ? ? ? ? ? myisampack -b-fmyIsam.MYI;? ? ? ? ? ? 壓縮后的表不能進(jìn)行寫(xiě)操作窿吩,只能進(jìn)行讀操作? ? 修復(fù):對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行檢查并修復(fù):? ? ? ? check table mytable;? ? ? ? repair table mytable;? ? ? ? myisamchk工具,修復(fù)時(shí)數(shù)據(jù)庫(kù)服務(wù)必須停止? ? 限制:使用MySQL5.0之前時(shí)默認(rèn)表的大小4G(存儲(chǔ)大表修改MAX_Rows和AVG_ROW_LENGTH)? ? ? ? 使用MySQL5.0之后的版本默認(rèn)支持256TB? ? 適用的場(chǎng)景:非事務(wù)型的應(yīng)用? ? ? ? ? ? ? 只讀類(lèi)的應(yīng)用? ? ? ? ? ? ? 空間類(lèi)的應(yīng)用(GPS的數(shù)據(jù))(2).Mysql之存儲(chǔ)引擎InnoDB? ? mysql5.5.8之后版本默認(rèn)使用的存儲(chǔ)引擎? ? 組成結(jié)構(gòu):通過(guò)設(shè)置innodb_file_per_table參數(shù)存儲(chǔ)的位置不同? ? ? ? ? ? ? ? ON:獨(dú)立表空間:tablename.ibd? ? ? ? ? ? ? ? OFF:系統(tǒng)表空間:ibdataX? ? 建議:對(duì)于mysql中建議使用InnoDB的獨(dú)立表空間? ? 特性:事務(wù)性存儲(chǔ)引擎? ? ? ? 完全支持事務(wù)的存儲(chǔ)引擎? ? ? ? Redolog(存儲(chǔ)已經(jīng)提交的事務(wù))和Undolog(存儲(chǔ)未提交的事務(wù))? ? ? ? InnoDB支持行級(jí)別鎖? ? ? ? 最大程序的支持并發(fā)? ? ? ? 行級(jí)別的鎖是由存儲(chǔ)引擎層實(shí)現(xiàn)的? ? 鎖:共享鎖(讀鎖)、獨(dú)占鎖(寫(xiě)鎖)? ? ? ? 表級(jí)鎖艾栋、行級(jí)鎖? ? ? ? 阻塞:確保事務(wù)并發(fā)的正常的執(zhí)行? ? ? ? 死鎖:兩個(gè)或者兩個(gè)以上的事務(wù)執(zhí)行過(guò)程中相互等待對(duì)方的資源而產(chǎn)生的一種異常? ? InnoDB狀態(tài)檢查:? ? ? ? show engine innodb status;? ? ? ? 適用場(chǎng)景:InooDB適用于大多數(shù)OLTP應(yīng)用(3).Mysql之存儲(chǔ)引擎CSV? ? 特點(diǎn):數(shù)據(jù)以文本的方式存儲(chǔ)在文件中? ? ? ? .CSV文件存儲(chǔ)表的內(nèi)容? ? ? ? .CSM文件存儲(chǔ)表的元數(shù)據(jù)如表的狀態(tài)和數(shù)據(jù)量? ? ? ? .frm文件存儲(chǔ)表的結(jié)構(gòu)的信息? ? ? ? 以CSV格式進(jìn)行數(shù)據(jù)的存儲(chǔ)? ? ? ? 所有的列必須不能為NULL的? ? ? ? 不支持索引(不適合大表爆存,不適合在線(xiàn)處理)? ? ? ? 可以對(duì)數(shù)據(jù)文件直接進(jìn)行編輯? ? 適用的場(chǎng)景:適合作為數(shù)據(jù)交換的中間表? ? ? ? ? ? ? mysql數(shù)據(jù)目錄->csv文件->其他web程序? ? ? ? ? ? ? excel電子表格 -> csv文件 -> mysql數(shù)據(jù)目錄(4).Mysql之存儲(chǔ)引擎Archive? ? 特點(diǎn):以zlib對(duì)表數(shù)據(jù)進(jìn)行壓縮,磁盤(pán)I/O更少? ? ? ? 數(shù)據(jù)存儲(chǔ)在A(yíng)RZ為后綴的文件中? ? ? ? 只支持insert和select操作? ? ? ? 只支持在自增的ID列上加索引? ? 適用場(chǎng)景:? ? ? ? 日志和數(shù)據(jù)采集類(lèi)的應(yīng)用(4).Mysql之存儲(chǔ)引擎Memory? ? 特點(diǎn):數(shù)據(jù)只保存在內(nèi)存中? ? ? ? Memory存儲(chǔ)引擎的I/O效率特別高? ? ? ? 支持HASH索引和BTree索引? ? ? ? 所有的字段為固定長(zhǎng)度? ? ? ? 不支持BLOG和TEXT等大字段? ? ? ? Memory存儲(chǔ)引擎使用表級(jí)鎖? ? ? ? 表中存儲(chǔ)數(shù)據(jù)的最大值由max_heap_table_size參數(shù)決定? ? 適用場(chǎng)景:用于查找或者映射表蝗砾,例如郵編和地區(qū)? ? ? ? ? ? 用于保存數(shù)據(jù)分析產(chǎn)生的中間表? ? ? ? ? ? 用于緩存周期性聚合數(shù)據(jù)的結(jié)果表

5).MySQl的數(shù)據(jù)庫(kù)的服務(wù)器參數(shù)

(1).Mysql配置參數(shù)作用域? ? 全局參數(shù)setglobal 參數(shù)名=參數(shù)值先较;set@@global.參數(shù)名:=參數(shù)值;? ? 會(huì)話(huà)參數(shù)set[session] 參數(shù)名=參數(shù)值悼粮;set@@session.參數(shù)名:=參數(shù)值闲勺;(2).內(nèi)存配置相關(guān)的參數(shù)? ? ? ? 確定可以使用的內(nèi)存的上限? ? ? ? 確定MySQL的每個(gè)連接使用的內(nèi)存? ? ? ? ? ? sort_buffer_size join_buffer_size? ? ? ? ? ? read_buffer_size read_rnd_buffer_size? ? ? ? 確定需要為操作系統(tǒng)保留多少內(nèi)存? ? ? ? 如何為緩存池分配內(nèi)存? ? ? ? ? ? Innodb_buffer_pool_size? ? ? ? ? ? 總內(nèi)存-(每個(gè)線(xiàn)程鎖需要的內(nèi)存*連接數(shù))- 系統(tǒng)的保留內(nèi)存? ? ? ? ? ? key_buffer_size(3).I/O相關(guān)配置參數(shù)? ? ? ? InnoDb存儲(chǔ)引擎的I/O參數(shù)設(shè)置:? ? ? ? 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存儲(chǔ)引擎的I/O參數(shù)設(shè)置:? ? ? ? delay_key_write? ? ? ? ? ? OFF:每次操作后刷新鍵緩沖中的臟塊到磁盤(pán)? ? ? ? ? ? ON:只對(duì)在鍵表時(shí)指定了delay_key_write選項(xiàng)的表使用延遲刷新? ? ? ? ? ? ALL:對(duì)所有MYSIAM表都使用延遲鍵寫(xiě)入(4).安全相關(guān)配置參數(shù)? ? ? ? expire_logs_days 指定自動(dòng)清理binlog的天數(shù)? ? ? ? max_allowed_packet 控制MySQL可以接受的包的大小(32M)? ? ? ? skip_name_resolve 禁用DNS查找? ? ? ? sysdate_is_now 確保sysdate()返回確定性的日期? ? ? ? read_only 禁止非super權(quán)限的用戶(hù)寫(xiě)權(quán)限? ? ? ? skip_slave_start 禁止Slave自動(dòng)恢復(fù)? ? ? ? sql_mode 設(shè)置MySQL所使用的SQL模式? ? ? ? ? ? strict_trans_tables? ? ? ? ? ? no_engine_subtitutoion? ? ? ? ? ? no_zero_date? ? ? ? ? ? no_zero_in_date? ? ? ? ? ? only_full_group_by(5).其他相關(guān)配置參數(shù)? ? ? ? sync_binlog = 1控制MySQL如何向磁盤(pán)刷新binlog? ? ? ? tmp_table_size和max_heap_table_size 控制內(nèi)存臨時(shí)表的大小(設(shè)置一致)? ? ? ? max_connections = 2000 控制允許的最大連接數(shù)

6).MySQl的數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì)和SQL的優(yōu)化

(1).過(guò)分的反范式化為表的建立太多的列

(2).過(guò)分的范式化造成太多的表關(guān)聯(lián)

(3).在OLTP環(huán)境中使用不恰當(dāng)?shù)姆謪^(qū)表

(4).使用外鍵保證數(shù)據(jù)的完整性

?如果你在學(xué)習(xí)Java的過(guò)程中或者在工作中遇到什么問(wèn)題都可以來(lái)群里提問(wèn)扣猫,阿里Java高級(jí)大牛直播講解知識(shí)點(diǎn)菜循,分享知識(shí),多年工作經(jīng)驗(yàn)的梳理和總結(jié)申尤,帶著大家全面癌幕、科學(xué)地建立自己的技術(shù)體系和技術(shù)認(rèn)知!可以加群找我要課堂鏈接 注意:是免費(fèi)的 沒(méi)有開(kāi)發(fā)經(jīng)驗(yàn)誤入哦! 非喜勿入昧穿!?學(xué)習(xí)交流QQ群:478052716

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末勺远,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子时鸵,更是在濱河造成了極大的恐慌胶逢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饰潜,死亡現(xiàn)場(chǎng)離奇詭異初坠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)彭雾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)碟刺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人薯酝,你說(shuō)我怎么就攤上這事半沽∩砼担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵抄囚,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我橄务,道長(zhǎng)幔托,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任蜂挪,我火速辦了婚禮重挑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棠涮。我一直安慰自己谬哀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布严肪。 她就那樣靜靜地躺著史煎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驳糯。 梳的紋絲不亂的頭發(fā)上篇梭,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音酝枢,去河邊找鬼恬偷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛帘睦,可吹牛的內(nèi)容都是我干的袍患。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼竣付,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诡延!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起卑笨,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤孕暇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后赤兴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妖滔,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年桶良,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了座舍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陨帆,死狀恐怖曲秉,靈堂內(nèi)的尸體忽然破棺而出采蚀,到底是詐尸還是另有隱情,我是刑警寧澤承二,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布榆鼠,位于F島的核電站,受9級(jí)特大地震影響亥鸠,放射性物質(zhì)發(fā)生泄漏妆够。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一负蚊、第九天 我趴在偏房一處隱蔽的房頂上張望神妹。 院中可真熱鬧,春花似錦家妆、人聲如沸鸵荠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛹找。三九已至,卻和暖如春哨坪,著一層夾襖步出監(jiān)牢的瞬間熄赡,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工齿税, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彼硫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓凌箕,卻偏偏與公主長(zhǎng)得像拧篮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牵舱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容