在 ec2 架構上提高 sphinx 搜尋性能
我正在處理 ec2 中的 m1.large 實例。
m1.large 64 位
vCPU -2 ECU-4 Memory -7.5GB DIsks-2 x 420 EBS-Optimized - Yes Network performance: Moderate
索引文件位於具有 500(承諾)IOPS 的 EBS 塊上。
我有一個索引包含 3 個屬性 id - uint 第二個 id - 字元串 第三個 id - 字元串
我正在索引 3 個大文本欄位。
索引文件大小:
spa - 68mb spd - 8.8 gb sph - 567 bytes spi - 88 mb spp - 20gb sps - 36mb
我的目標是每次查詢達到大約 0.1~ 秒,但是,目前我很難達到這個目標。
以下是查詢日誌 -
必須掩蓋查詢,將每個字母更改為“x”
[Mon Aug 12 06:34:17.569 2013] 0.306 sec [ext2/0/ext 33074 (0,40)] [Index_1] [ios=2891 kb=101461.1 ioms=32.8 cpums=306.5] xxx xxxxxxxxx xxxxx [Mon Aug 12 06:34:43.105 2013] 0.155 sec [ext2/0/ext 55208 (0,40)] [Index_1] [ios=256 kb=10974.0 ioms=42.7 cpums=120.1] xxxxxx xxx [Mon Aug 12 06:37:43.063 2013] 0.148 sec [ext2/0/ext 122 (0,40)] [Index_1] [ios=257 kb=17985.1 ioms=6.1 cpums=148.9] xxxxxxxxx xxx xxxxxxxxx xxxx xxxxx xxxx xx xxxxx [Mon Aug 12 07:00:18.735 2013] 0.179 sec [ext2/0/ext 1409 (0,40)] [Index_1] [ios=246 kb=9872.1 ioms=139.3 cpums=48.3] xxxxxxx xxx xxxxxxx [Mon Aug 12 07:00:40.811 2013] 2.395 sec [ext2/0/ext 54213 (0,40)] [Index_1] [ios=2360 kb=92897.0 ioms=2004.9 cpums=458.9] xxxx xxxx xxxxxx [Mon Aug 12 07:04:49.447 2013] 0.358 sec [ext2/0/ext 17698 (0,40)] [Index_1] [ios=696 kb=26975.8 ioms=237.0 cpums=140.2] xxxxx xxxxxx xxxx xxxxx [Mon Aug 12 07:05:29.542 2013] 0.041 sec [ext2/0/ext 0 (0,40)] [Index_1] [ios=8 kb=1606.5 ioms=26.3 cpums=16.8] xxxxxxxx xxxxxxx xxx xxxxxxxx [Mon Aug 12 07:05:40.208 2013] 0.244 sec [ext2/0/ext 72176 (0,40)] [Index_1] [ios=376 kb=15216.4 ioms=41.1 cpums=214.0] xxxxxxxx xxxxxxxx xxxxxxxx [Mon Aug 12 07:13:28.726 2013] 10.177 sec [ext2/0/ext 703 (0,40)] [Index_1] [ios=6235 kb=294854.2 ioms=8724.6 cpums=1723.4] x xxxxx xxxxxxx xxxxxxx xx xxxx xxxxxxx, xxxxxxxxx a xxxxx xxxxxxx xxxxxx, a xxxxxxx xxxxxxx xxxxxxx xx xxxx xxxxxxxx xxxxxxx xx xxxx xxxxx xxxxxx xxxxxx [Mon Aug 12 07:14:16.458 2013] 1.522 sec [ext2/0/ext 703 (0,40)] [Index_1] [ios=6235 kb=294854.2 ioms=100.1 cpums=1523.6] a xxxxx xxxxxxx xxxxxxx xx xxxx xxxxxxx, xxxxxxxxx a xxxxx xxxxxxx xxxxxx, a xxxxxxx xxxxxxx xxxxxxx xx xxxx xxxxxxxx xxxxxxx xx xxxx xxxxx xxxxxxx xxxxxx [Mon Aug 12 07:36:47.737 2013] 1.391 sec [ext2/0/ext 727 (0,40)] [Index_1] [ios=5899 kb=269990.2 ioms=161.8 cpums=1320.6] a xxxxx xxxxxxx xxxxxxx xx xxxx xxxxxxx, xxxxxxxxx a xxxxx xxxxxxx xxxxxx, a xxxxxxx xxxxxxx xxxxxxx xx xxxx xxxxxxx xxxxx xxxxxx xxxxxx [Mon Aug 12 07:38:12.832 2013] 1.325 sec [ext2/0/ext 140830 (0,40)] [Index_1] [ios=3264 kb=120011.3 ioms=737.1 cpums=652.5] a xxxxx xxxxxxx xxxxxxx xx xxxx
獅身人面像會議 -
{ source = DB path = /home/ubuntu/sphinx_drive/sphinxdata/index/IndexMain docinfo = extern charset_type = sbcs stopwords = /home/ubuntu/sphinx_drive/sphinxdata/stopwords morphology = stem_en min_word_len = 3 html_strip = 1 } searchd { mysql_version_string = 5.0.37 listen = 0.0.0.0:9999:mysql41 log = /home/ubuntu/sphinx_drive/sphinxdata/log/searchd.log query_log = /home/ubuntu/sphinx_drive/sphinxdata/log/query.log read_timeout = 5 max_children = 30 pid_file = /home/ubuntu/sphinx_drive/sphinxdata/searchd.pid max_matches = 1000 seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 workers = threads binlog_path = /home/ubuntu/sphinx_drive/sphinxdata/data compat_sphinxql_magics = 0 }
您對提高查詢速度有什麼建議或建議嗎?如果您需要任何其他資訊,請詢問,我會附上。
謝謝!
TL / 博士
這是我的建議的摘要(有關更多解釋,請參閱下面的標題)
- 生成有關您的 DiskIO/記憶體/CPU 使用情況的統計資訊
- 嘗試更多的 IOPS,這對查詢時間有顯著影響嗎?
- Sphinx 目前使用了多少記憶體?
- 調查問題查詢(打開詳細日誌記錄)
- 利用同一台電腦上的多個 CPU 核心
有用的資訊收集
您是否檢查過 EC2 的性能,看看它可能在哪裡掙扎(如果有的話)?我在想 DiskIO、記憶體、CPU 將是很好的檢查指標。
在這種情況下,看看增加 IOPS 是否會顯著提高性能會很有趣,您是否嘗試了一些不同的 IOPS 值來查看如何提高性能?
記憶體 - 我希望您使用的記憶體遠少於 7GB
http://sphinxsearch.com/blog/2011/11/11/sphinx-memory-consumption/
本文通過排除 .spd 和 .spp 文件來計算記憶體。所以你的記憶體消耗應該在 200MB 左右。
您可能還需要考慮 rt_mem_limit 和 mem_limit。話雖如此,您似乎不太可能消耗超過 7GB 的記憶體。
您可以使用以下命令確認您的記憶體使用情況
SHOW INDEX myindex STATUS
這是一個想法:如果您不需要那麼多記憶體但可以使用更多 CPU,那麼使用 2x c1.medium 可能會更好( $ 0.183) instead of 1x m1.large ( $ 0.320)
追踪該查詢
http://sphinxsearch.com/blog/2011/10/27/sphinx-performance-know-your-queries-time/
query_log_format = sphinxql query_log = query.log
然後重新啟動 Sphinx 守護程序,您應該會得到更多有用的輸出。
這裡的想法是使用這些數據並尋找問題的線索(一個特定的查詢可能會導致問題,您可能想嘗試專門優化它)。
多執行緒搜尋 - 利用多個 CPU 核心
您可能想研究 sphinx 分佈式搜尋功能,它可以幫助一些查詢類型。您可以對其進行配置以利用 m1.large 中的兩個 CPU 核心
此外,您還可以獲得一個獎勵:一旦您為分佈式搜尋配置伺服器,您也可以並行進行索引!
…
注意事項:雖然這種技術將改進大多數類型的搜尋查詢,但有些不會從並行執行中受益匪淺。
…
如果數據節點將大量數據返回到後處理,聚合器由於其單執行緒特性很可能成為瓶頸