第一次操刀數據庫分表的教訓與經驗--白干一場


做完了分表之后,數據庫里面的表從8張變成了8000張,我以為谷歌的抓取速度會降低為原來的一半,於是每天看一次谷歌抓取速度,結果實在是太失望了

image

結果發現,分完表之后谷歌抓取等待的時間迅速上升了,對mysql不是很了解,查了一下mysql的一些配置信息,我的數據庫默認是innodb,

結果發現innodb默認是把所有的表放在一個文件里面,無論這個數據庫里面有多少張表,也想起來sqlserver默認也是吧所有的表放在一個文件里面,

sqlserver分表的時候自己可以新添加文件組,查了下mysql的配置,mysql 有這么個配置Innodb_file_per_table,不過設置完后必須從新導入一次數據,以后安裝mysql得先看看Innodb_file_per_table的配置,以免自增麻煩。

我以為這樣就好了,但是看谷歌抓取時候監控寶的監控記錄,發現cpu還是和以前一樣高

image

cpu高是因為什么呢?

是因為我分表造成的?

1:查看mysql 在win下的設置,說一台服務器上的文件句柄數最大為2048個,是不是我分的太多表造成(8000張。。)?-----經驗欠缺,先這么着吧

2:會不會是因為我讀取問題列表時候,吧問題的全部內容讀取出來了,造成並發高時候,io忙,cpu很忙碌?-------這個有辦法加個簡介字段

3:會不會是因為我讀取出來內容用正則表達式過濾html,傳說正則表達式是高並發下的cpu殺手?--------------這個有辦法加個簡介字段、過濾html

給1000張表加字段的問題用博客園園友的分表工具,很輕松就搞定了,

原來是select * 換成 select 部分字段 PetaPoco 很容易就搞定了

以前是這么寫的

           Page<question> result = learnDAL.learnDB.GetInstance().Page<question>(page, itemsPerPage,
              @"select 
*
from question_home order by addtime desc ", "");    

                                    

現在這么寫

          Page<question> result  = learnDAL.learnDB.GetInstance().Page<question>(page, itemsPerPage,
                PetaPoco.Sql.Builder.Select(@"
    title, 
	titlecode, 
	Brief as content,
	userid, 
	siteid, 
	tagids, 
	havegoodanswer, 
	addtime, 
	tags").From("question_home").OrderBy("addtime desc ")

發現PetaPoco這種開源的小工具果然是小巧玲瓏好掌握

做完之后上線做個壓力測試對比下

【周五做的50並發和cpu觀測】---ps:這個在線並發測試工具,只能免費使用幾次,哎。。。。。。。

image

image

周六修改完之后

100個並發和cpu【ps:最后幾個免費金幣】

image

image

發現讀取列表時候不讀取大字段,和不做正則表達式過濾,cpu立馬平穩了,

這次分表完全是白干了一場,還不知道一個mysql庫里面放8000張表在win2003下是不是合理,是不是很糟糕,

求路過的大神指點一下 mysql和sqlserver,在一個數據庫庫里面放多少張表是合理的?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM