做完了分表之后,數據庫里面的表從8張變成了8000張,我以為谷歌的抓取速度會降低為原來的一半,於是每天看一次谷歌抓取速度,結果實在是太失望了
結果發現,分完表之后谷歌抓取等待的時間迅速上升了,對mysql不是很了解,查了一下mysql的一些配置信息,我的數據庫默認是innodb,
結果發現innodb默認是把所有的表放在一個文件里面,無論這個數據庫里面有多少張表,也想起來sqlserver默認也是吧所有的表放在一個文件里面,
sqlserver分表的時候自己可以新添加文件組,查了下mysql的配置,mysql 有這么個配置Innodb_file_per_table,不過設置完后必須從新導入一次數據,以后安裝mysql得先看看Innodb_file_per_table的配置,以免自增麻煩。
我以為這樣就好了,但是看谷歌抓取時候監控寶的監控記錄,發現cpu還是和以前一樣高
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:這個在線並發測試工具,只能免費使用幾次,哎。。。。。。。
周六修改完之后
100個並發和cpu【ps:最后幾個免費金幣】
發現讀取列表時候不讀取大字段,和不做正則表達式過濾,cpu立馬平穩了,
這次分表完全是白干了一場,還不知道一個mysql庫里面放8000張表在win2003下是不是合理,是不是很糟糕,
求路過的大神指點一下 mysql和sqlserver,在一個數據庫庫里面放多少張表是合理的?