自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

網(wǎng)站整體優(yōu)化之?dāng)?shù)據(jù)庫(kù)優(yōu)化

數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)優(yōu)化是使數(shù)據(jù)庫(kù)運(yùn)用高級(jí)的語(yǔ)言,達(dá)到功能性的強(qiáng)大,所謂數(shù)據(jù)庫(kù)的優(yōu)化是對(duì)數(shù)據(jù)庫(kù)的升級(jí),數(shù)據(jù)庫(kù)優(yōu)化有利于數(shù)據(jù)庫(kù)的發(fā)展。

在對(duì)數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化之前還是有很多工作要做的,就目前web2.0的程序來說,很大瓶頸是數(shù)據(jù)庫(kù)的吞度量。不過,如何才能確定系統(tǒng)的瓶頸是數(shù)據(jù)庫(kù)呢,因?yàn)橹挥写_定數(shù)據(jù)庫(kù)是整個(gè)系統(tǒng)的瓶頸,我們才有必要去優(yōu)化他,畢竟,還有這么多需求等待我們?nèi)プ觥?/p>

如何確定數(shù)據(jù)庫(kù)是瓶頸?

1 如果程序設(shè)計(jì)良好,有一個(gè)數(shù)據(jù)庫(kù)操作邏輯層,可以從這個(gè)層的統(tǒng)計(jì)數(shù)據(jù)看到每個(gè)請(qǐng)求花費(fèi)的時(shí)間,如果平均時(shí)間已經(jīng)不能讓你容忍的話,數(shù)據(jù)庫(kù)已經(jīng)是瓶頸了。

2 在數(shù)據(jù)庫(kù)的服務(wù)器上使用top命令,看看mysql服務(wù)器占用資源的情況,看看機(jī)子的平均負(fù)載。

如果服務(wù)器的平均負(fù)載已經(jīng)很高,mysql占用了塊100%的cpu資源,說明mysql服務(wù)器很忙了。

3 在數(shù)據(jù)庫(kù)服務(wù)器上使用iostat命令,看看磁盤IO,如果block住的操作比較多的話,說明數(shù)據(jù)庫(kù)操作還是過于頻繁了,磁盤都響應(yīng)不急了。

4 建議打開mysql的慢查詢?nèi)罩?,這樣grep select看一下日志中的慢查詢的數(shù)量,如果數(shù)量較多,說明慢查詢的數(shù)量很多,需要進(jìn)行調(diào)整了。

5 如果有一天數(shù)據(jù)庫(kù)無(wú)法插入了,需要檢查一下數(shù)據(jù)庫(kù)表是不是過大了。32位的操作系統(tǒng)上一個(gè)表最大的容量是2^32這么大。不過還是建議增加一個(gè)數(shù)據(jù)庫(kù)操作的邏輯層,在數(shù)據(jù)庫(kù)操作的前后記錄下操作的時(shí)間,進(jìn)行統(tǒng)計(jì)上報(bào),利用監(jiān)控程序來報(bào)警相關(guān)負(fù)責(zé)人,這樣可以及早的知道數(shù)據(jù)庫(kù)是瓶頸,提前做出優(yōu)化。

知道數(shù)據(jù)庫(kù)是瓶頸了,如何來進(jìn)行優(yōu)化呢?

1 我們第一個(gè)想到是看看數(shù)據(jù)庫(kù)的容量是不是太大了,如果數(shù)據(jù)庫(kù)表太大的話,索引文件也會(huì)比較大,每次的更新操作就會(huì)更加的費(fèi)時(shí)。需要考慮進(jìn)行分庫(kù)和分表了。

分庫(kù)分表按照一定的規(guī)則來對(duì)數(shù)據(jù)庫(kù)中的記錄進(jìn)行分區(qū)來存儲(chǔ),一方面可以做到一定的負(fù)載均衡,將請(qǐng)求平分下來,每個(gè)區(qū)段去獨(dú)自承受;另一方面,分庫(kù)分表可以使我們存儲(chǔ)和操作更多的數(shù)據(jù)。

不過分庫(kù)分表需要多之前基于單庫(kù)的程序進(jìn)行修改,存在一定的風(fēng)險(xiǎn),因此,在程序設(shè)計(jì)之初就應(yīng)該考慮到分庫(kù)分表的需要,最好是將數(shù)據(jù)庫(kù)操作層獨(dú)立出來,便于擴(kuò)展和更改。

2 如果數(shù)據(jù)庫(kù)表不是很大,但是查詢慢的話,我們需要檢查一下我們的sql查詢語(yǔ)句,利用mysql的explain語(yǔ)句看看是不是使用了索引,如果沒有使用索引,那我們需要在相應(yīng)的字段上建上索引,反復(fù)的使用explain,尋找到個(gè)一個(gè)合適的索引。

在建索引時(shí)需要考慮:

1)數(shù)據(jù)庫(kù)的索引要做到越少越好。

因?yàn)槊看胃露夹枰滤饕饕^多就會(huì)降低寫入的速度。

2)最窄的字段放在鍵的左邊。

這樣提高了索引中每一個(gè)點(diǎn)的基數(shù),帶來更好的索引讀寫性能。

3)盡量避免file sort排序、臨時(shí)表和表掃描。

對(duì)于大表,全表掃描會(huì)導(dǎo)致大量的磁盤IO的操作,會(huì)導(dǎo)致操作非常的緩慢。

4)對(duì)于大表,盡量不要將索引建在字符串類型的列上,字符串的匹配是很費(fèi)時(shí)的,需要付出很高的性能代價(jià),如果一定有必要,建議對(duì)字符串列進(jìn)行hash后取一個(gè)整形的值來進(jìn)行索引。

3 如果更新操作有點(diǎn)慢,而讀操作的響應(yīng)要求不需要很及時(shí)的話,可以考慮利用mysql的主從熱備來分擔(dān)讀寫的壓力。

畢竟對(duì)數(shù)據(jù)庫(kù)的操作,寫少讀多。因此,我們將對(duì)數(shù)據(jù)庫(kù)的寫操作放到mysql的主服務(wù)器上,利用mysql的熱備,我們?cè)趥浞莸臄?shù)據(jù)庫(kù)服務(wù)器上進(jìn)行讀操作,由于可以有多個(gè)熱備mysql,于是可以將讀操作分布在多個(gè)熱備上面,從而將讀操作均衡開來,提高讀操作的性能。

 

4 緩存的使用

緩存是一切后臺(tái)程序的根本,因?yàn)?0%的請(qǐng)求是對(duì)應(yīng)20%的數(shù)據(jù),我們只需要少量的內(nèi)存將20%的數(shù)據(jù)緩存起來,就可以大大的滿足我們系統(tǒng)需求,何樂而不為呢。

1)mysql設(shè)置中盡量增加key cache,thread cache、查詢的cache。

2)在應(yīng)用程序?qū)釉黾右粋€(gè)memcached這樣的通用cache。

3)對(duì)于少量數(shù)據(jù),但是操作頻繁的表使用mysql提供的內(nèi)存heap表,可以獲得極高的寫入和讀取速度。

5 數(shù)據(jù)庫(kù)的設(shè)計(jì)上進(jìn)行優(yōu)化

對(duì)于傳統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)我們講究建模范式,避免數(shù)據(jù)的冗余從而導(dǎo)致臟數(shù)據(jù)。然而在我們實(shí)際的應(yīng)用中需要根據(jù)情況來使用第三范式的一些規(guī)則,對(duì)于一些頻繁需要在多個(gè)地方出現(xiàn)的數(shù)據(jù),如同一個(gè)論壇這種用戶和主題以及回復(fù)等有關(guān)聯(lián)的應(yīng)用中,如果我們將用戶同主題和回復(fù)分開來存儲(chǔ),每次查詢一下一篇文章或者一個(gè)回復(fù)的情況都需要對(duì)用戶表和主題表或者回復(fù)表進(jìn)行聯(lián)查,如果數(shù)據(jù)量小的話,這樣聯(lián)查的性能還是可以接受的,如果表大一點(diǎn),上了3、4十萬(wàn)以上的數(shù)據(jù),聯(lián)查的速度就會(huì)比較慢了。

該范式化的地方需要進(jìn)行范式化,但是還是需要根據(jù)情況來設(shè)計(jì)我們的表,從而達(dá)到性能和良好設(shè)計(jì)的折中。

其它的話:

1 對(duì)于數(shù)據(jù)庫(kù)的操作建議分層處理,至少分為兩層,一層是數(shù)據(jù)庫(kù)操作的邏輯層,一層是數(shù)據(jù)庫(kù)的cache層。

從一開始就考慮如此,可以很方便在未來對(duì)數(shù)據(jù)庫(kù)進(jìn)行劃分部署、分庫(kù)分表擴(kuò)展。

2 增加mysql的監(jiān)控,監(jiān)控mysql的慢查詢?nèi)罩荆O(jiān)控mysql的請(qǐng)求情況。

3 根據(jù)自己的需要來選擇mysql的存儲(chǔ)引擎。

myisam有較高的讀寫速度,但是由于表鎖定,不能同時(shí)進(jìn)行快速的讀和寫。

innodb支持事務(wù),提供了行級(jí)的鎖,但是為了使用事務(wù),表空間會(huì)比較大,而且不支持全文索引。

heap將表放到內(nèi)存中,適合與表小而需要頻繁操作的情況,如用戶信息,其讀寫很快,但是不是持久的,需要自己來寫工具讓其持久。

4 mysql服務(wù)器的一些狀態(tài)檢測(cè)的命令。

show slave status:可以看到主從同步的情況。

show [full] processlist:可以看到mysql服務(wù)器的請(qǐng)求情況,如果發(fā)現(xiàn)lock情況很多,需要注意了。

show status:可以看到mysql服務(wù)器的各種請(qǐng)求情況。

通過上文的介紹,現(xiàn)在對(duì)數(shù)據(jù)庫(kù)的優(yōu)化應(yīng)該都有了很多的了解,數(shù)據(jù)庫(kù)的優(yōu)化是數(shù)據(jù)庫(kù)發(fā)展過程中不可缺少的環(huán)節(jié),希望大家能夠掌握好數(shù)據(jù)庫(kù)的優(yōu)化,相信對(duì)大家是有好處的,懂的了數(shù)據(jù)庫(kù)的優(yōu)化,相信對(duì)自己本身就是一個(gè)提高。

【編輯推薦】

  1. 數(shù)據(jù)庫(kù)優(yōu)化設(shè)計(jì)注意事項(xiàng)
  2. 數(shù)據(jù)庫(kù)優(yōu)化前的10個(gè)問題
  3. 淺析大數(shù)據(jù)量高并發(fā)的數(shù)據(jù)庫(kù)優(yōu)化
  4. DB2數(shù)據(jù)庫(kù)優(yōu)化的6種技巧
責(zé)任編輯:迎迎 來源: 博客網(wǎng)
相關(guān)推薦

2013-09-17 10:32:08

Android性能優(yōu)化數(shù)據(jù)庫(kù)

2023-07-12 08:55:16

PawSQL數(shù)據(jù)庫(kù)

2011-06-28 18:04:06

網(wǎng)站優(yōu)化

2018-03-30 14:30:10

數(shù)據(jù)庫(kù)SQL語(yǔ)句性能優(yōu)化

2018-03-30 13:59:22

數(shù)據(jù)庫(kù)SQL語(yǔ)句性能優(yōu)化

2014-07-18 09:33:53

數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)優(yōu)化

2011-07-21 16:40:28

網(wǎng)站優(yōu)化

2011-06-20 14:44:49

網(wǎng)站優(yōu)化

2011-06-24 16:44:43

網(wǎng)站優(yōu)化

2015-09-10 09:24:58

2011-06-23 19:13:08

ALT標(biāo)簽

2011-06-29 14:27:58

網(wǎng)站優(yōu)化

2017-06-16 21:36:14

2011-03-03 17:56:52

MySQL數(shù)據(jù)庫(kù)優(yōu)化

2011-07-27 08:56:32

Oracle數(shù)據(jù)庫(kù)綁定變量軟解析

2011-06-23 09:09:12

2011-03-08 08:49:55

MySQL優(yōu)化單機(jī)

2011-06-24 17:23:30

網(wǎng)站優(yōu)化

2010-08-26 14:39:54

Infobright數(shù)

2013-01-04 10:00:12

MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)查詢優(yōu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)