您在這裡

優化資料庫?

tky's 的頭像
tky 在 2007-03-15 (四) 21:28 發表

TKY最近一直深受資料庫膨脹速度過快,以及老是看到連線過多、資料庫停擺的狀況。
和伺服器網管溝通的結果,可能是因為Drupal在存取資料庫時沒有及時釋放資源才會導致連線數一直飆高;而資料庫在幾個月內快速的膨脹到100mb,也是拖累連線速度的一個地方。但老實說TKY對此也沒個底。

針對資料庫過大的狀況,TKY發現可以用phpmyadmin的「優化資料表」,能夠大幅度的縮減資料庫佔用的體積:從100多mb減到剩35mb左右。再加裝一個db_maintenance,每天對大體積的資料表跑幾次優化。

在這個過程中,TKY發現幾個特肥的資料表:accesslog, watchdog, cache以及搜尋相關的三個資料表。前兩個資料表可以透過調小統計log的時間來減少,chach也還好,因為沒了它更糟。唯一令人感到麻煩的「搜尋」資料表。似乎只會越來越大,而且資料比數多到嚇人:六百多筆的內容,就有十萬多筆的index。體積加一加有五分之一那麼多。

這樣的情況讓TKY覺得,似乎啟用站內搜尋模組在可預見的未來會是一個不智之舉......。想用google search來取代,但google search只提供一個區塊。一來不曉得要怎麼配版型,二來少了進階搜尋,感覺挺差的。這就叫有一好沒兩好嗎?

針對連線數過高的問題,TKY上了官網去看,發覺還蠻多人有同樣問題的。似乎跟Drupal使用pconnect有關;不過那是什麼鬼,TKY可是完全沒概念。不曉得有沒人可以指點一下。

使用了負荷模組,但不是很確定效果,因為有時還是會看到資料庫忙到掛的狀況。訪客數啟動線越調越低,但奇怪好像一點沒影響。真是,不然你要怎樣,唉~。

這方面,大家有沒有好建議呢?
TKY

資料庫肥,其實跟慢速不一定有關係
分析一下存取哪一個url最高
就知道大概是什麼樣的東西搞鬼
如果是search頁面,那恭喜你,表示你站上search的人很多
實體的用戶很多
如果是其他有的沒有的頁面,可能是機器人抓站搞的鬼
大多是討厭的yahoo搜尋引擎
roobots.txt定義一下才是真的

以你的網站性質,後者的可能比較大

--
from open mind to open source~

謝謝jimmy。
TKY也才在想說到底資料庫肥為什麼會影響網頁開啟速度。或許真的有吧?但要到多大才會有明顯的影響呢?

就search來說,其實search的人不多。不過就是很擔心說,search的資料表一天大一天。TKY的網管說,體積大倒其次,筆數多才麻煩。十萬多筆的search index,雖然才5mb多,但由於不知道是否會影響效能,所以一直擔心到現在。

TKY這個月來天天察看瀏覽數和連線數,感覺好像浪潮一樣:大浪來時,每兩個小時可以破千次的page serve、破兩百的visitor;浪退了,兩個小時內有30個人就算多了。TKY除了google沒擋之外,連線機器人前幾名的百度和雅虎,都寫進了roobots.txt,而且還規定一個頁面都不給看。不過....好像沒什麼用。難道連google也要擋嗎?

tky

tky

只要存取資料庫程式設計得當
可能要到百萬筆才有速度上明顯的差異
所以別擔心serach index的問題,筆數不代表什麼

另外,吃CPU這是架站一定會有的困擾
可以查查「砍站」來看看
也可以想辦法提昇cache的速度來解決
要不就加裝防火牆

--
from open mind to open source~

對於連線數過多的問題,TKY還有一個猜想:RSS提供太多了?
Drupal每個term都給一個RSS feed的作法,會不會讓某些訪客利用「聯播」的機制,密集的存取RSS。如果RSS Feed提供的多,多人同時存取的結果,就是資料庫連線掛掉?
是否有這個可能呢?如果有,那是否有限制RSS提供的機制或模組?

另,TKY審視了一下Watchdog的資料表,幾乎九成九都是page not found的「垃圾」資訊。一週的紀錄而已,就佔了將近9mb的資料庫空間。會不會太扯。不曉得有沒有模組可以讓使用者自行決定要記錄哪些項目、哪些不要?

還有cache資料表,不是TKY想抱怨,而是發現到它已經晉升大資料表的第一名。大概佔34%左右的空間,優化也不會再小了。這就是速度所要付出的代價嗎?但註冊使用卻感受不到這樣的速度.......。

tky

tky

嘻!我最近也有類似的問題,不過我的似乎是被大陸的「搜狗」(sogou spider)盯上了,看了一下httpd-access.log,每個小時都來砍一次站。前兩天,要上課發現自己的網站上不去,心一橫,直接用防火牆把搜狗所在的網段通通封起來,這幾天似乎網頁開起來就快多了。XD

(OS.反正SOGOU在台灣使用的人大概也沒幾個,BAN掉他沒有差)

對於RSS,TKY有時檢視log,發現RSS的存取也算一次連線,就懷疑說那多個RSS一次給他掃瞄,不就多了很多連線?由於看到太多次連線過多的大水滴頭畫面,開始懷疑這會不會是拖垮連線的原因。

至於log,TKY深有同感。之前剛架站的時候,watchdog的記錄設定為四週。結果資料爆多!加加起來快一百多mb,傻掉。現在設成三天,並且改用google analytics來分析流量,希望能減少用量。

不過只記三天的資料而已,卻仍有五萬多筆、9mb的資料......而且九成以上都是page not found的訊息,真他X的。所以才想問問大家,是否知道停止記錄找不到頁面訊息的設定或模組。

tky

tky