1. 程式人生 > >freeswitch 之mysql效能優化篇

freeswitch 之mysql效能優化篇

   大家在使用freeswitch時,為了方便freeswitch與GUI等進行結合,經常會使用mysql資料庫對fs進行啟動。但是freeswitch使用mysql啟動後,會比使用自帶資料庫更加消耗資源,大家可以將源生的創表方法改成使用記憶體資料庫進行優化,可以增加freeswitch的效能。

   具體步驟如下:

  1.進入freeswitch的原始碼包,cd src

  2.修改源生的switch_core_sqldb.c

  3.將需要用sql啟動的表,將原本的建表語句:CREATE  TABLE complete    在末尾新增修改為:ENGINE=MEMORY DEFAULT CHARSET=utf8;

 4.到這裡還是不行的,本人在高併發情況下發現,高併發下,表channel中沒有索引,刪除和修改時,往往比session慢很多,在持續高併發下,會將freeswitch造成卡頓的情況,所以還需要修改原始碼將channel中的uuid加入索引,在加入索引前,freeswitch每秒僅處理3條,加入索引後可以達到每秒處理上百條的效果。 在switch_core_sqldb.c中加入:  switch_cache_db_create_schema(sql_manager.dbh, "create index uuid1 on channels(uuid)", NULL);

5.freeswitch中recover表中因為有text欄位,所以無法修改成記憶體表,如果有需求做HA的fs叢集,可以將原始碼中text改為varchar(20000),根據實際測試這個欄位不會超過2W個字元,然後將該表也改為記憶體表即可。記住也需要將查詢的條件加上索引,這張表需要加單索引和組合索引6個。這裡就不具體列出了。

6.修改完成後,編譯後,make && make install 即可

ps:源生的建表語句,將欄位長度設定太長,導致啟動時,sql建表會報錯,大家可以在這裡把幾個4096長度的欄位改小,實際上是用不到這麼長的長度。記憶體表預設在mysql中很小隻有16M,在實際使用過程中,根據FS上需要的併發以及資料量進行適當的增大。