MongoDB資料庫順序讀效能評估測試
問題:主單對應的明細表關係,每一條主單在明細表中都有大量的明細存在,而明細單獨以單個文件儲存在mongodb中會因為key-value關係浪費大量的key值空間。
解放方法:將明細表中的同一主單對應的明細壓縮到一個文件中,提取冗餘欄位屬性,將明細特有key-value組織成一個陣列,這樣資料相對集中,可以提高mongodb的順序讀效能。
前提:主單對應的明細條數不能過多,壓縮匯聚的明細總體積不能超過當前mongodb支援的單個文件的最大體積,具體看資料庫配置,有的限制是16MB,有的32MB,有的是64MB;我們的庫最大文件支援16MB。
測試前準備:在同一個mongodb資料庫中存放最佳化前的資料集合、最佳化後的資料集合,例如我們最佳化前的集合是bill_detail、最佳化後的集合是detail_coll。
測試方法:測試方法如下表格所示
[mongodb@se122 test1]$ cat bill_detail_ETL_Patient_IDStr1.sh currentTime1=`date +%Y%m%d%H%M%S` echo "start_time:" $currentTime1 mongo --port 27000 wl_insert /home/mongodb/test1/bill_detail_ETL_Patient_IDStr1.js currentTime2=`date +%Y%m%d%H%M%S` echo "finish_time:" $currentTime2 time3=$(($currentTime2 - $currentTime1)) echo "execution time_elapsed:" $time3 [mongodb@se122 test1]$ |
[mongodb@se122 test1]$ cat bill_detail_ETL_Patient_IDStr1.js var cursor = db.ETL_Patient_IDStr.find(); var i=0; while(cursor.hasNext()){ var obj = cursor.next(); if(i<=1157){ db.bill_detail.find({"ETL_Patient_IDStr":obj.ETL_Patient_IDStr}).explain("executionStats"); } if(i>1157){ break; } i++; }
[mongodb@se122 test1]$ |
測試總覽表格:
對比 指標 |
最佳化前 |
最佳化後 |
對比度 |
期望 |
資料量 |
55357286 |
427003 |
7.70% |
減少 |
集合並行載入時間 |
932s |
432s |
46.35% |
降低 |
儲存磁碟IO請求數峰值 |
3917/s |
887/s |
22.64% |
降低 |
儲存磁碟IO吞吐量峰值 |
15.88MB/s |
19.38MB/s |
22.04% |
提高 |
mongo資料返回峰值 |
23.4KB/s |
52.8KB/s |
55.68% |
提高 |
mongo消耗記憶體 |
52.4GB |
36GB |
31.30% |
下降 |
mongo消耗快取 |
66% |
50% |
16% |
下降 |
圖4 最佳化後的讀操作磁碟IO請求
圖5最佳化前的讀操作磁碟IO請求
針對圖4、圖5,相同查詢操作測試下,最佳化前的物理磁碟IO請求數峰值是3917次/s,最佳化後的物理磁碟IO請求數峰值降低到887次/s,另外,可以看出,最佳化前查詢操作導致磁碟IO請求居高不下。
圖6 最佳化後的查詢操作IO吞吐量
圖7 最佳化前的查詢操作IO吞吐量
針對圖6、圖7,相同查詢操作測試下,最佳化前的物理磁碟IO吞吐量數峰值是15.88MB/s,最佳化後的物理磁碟IO請求數峰值提高到19.39MB/s,最佳化後順序IO提高了磁碟IO讀效能,相比最佳化前提高了3.5MB/s;另外,磁碟IO高峰期,最佳化後相比最佳化前在時間上有明顯的縮短。
圖8 最佳化後的mongo資料庫資料返回
圖9 最佳化前的mongo資料庫資料返回
針對圖8、圖9,相同查詢操作測試下,最佳化前mongo資料庫資料返回數峰值是23.4kb/s,最佳化後的mongo資料庫資料返回數峰值提升到52.8kb/s,最佳化後資料分佈有利於資料庫順序讀,明顯提升了mongo資料庫順序讀的效能,同時降低了mongo資料庫高負載時間。
圖10 最佳化後的mongo資料庫佔用主機記憶體
圖11 最佳化前的mongo資料庫佔用主機記憶體
針對圖10、圖11,
從圖10-圖11,顯示的資料可以看出,最佳化後相比最佳化前,mongo資料庫佔用的主機記憶體下降31.30%。
以上圖表資料,除了使用grafana軟體,也可以使用linux作業系統命令獲得。
測試過程中,使用echo 1 > /proc/sys/vm/drop_caches命令來清空主機快取,透過ps -ef|grep mongo來查詢mongodb的資料庫主程式,如下所示131351程式就是啦,使用kill -2 131351命令關閉資料庫,再重啟來清空資料庫記憶體的佔用。
[root@se122 ~]# ps -ef|grep mongo
mongodb 66833 1 5 Aug01 ? 13:48:42 mongos --configdb 10.117.130.121:27001 --logpath /home/mongodb/mongodata/logs/mongos.log --port 27000 --fork
root 72060 71965 0 10:58 pts/1 00:00:00 grep --color=auto mongo
root 75111 75073 0 Aug09 pts/7 00:00:00 su - mongodb
mongodb 75112 75111 0 Aug09 pts/7 00:00:00 -bash
root 107805 1 0 Aug08 ? 00:00:00 su - mongodb
mongodb 107806 107805 0 Aug08 ? 00:00:00 -bash
mongodb 107849 107806 0 Aug08 ? 00:00:01 mongo --port 27000
mongodb 131351 1 0 Aug08 ? 00:23:21 mongod --dbpath /home/mongodb/mongodata/rs1 --logpath /home/mongodb/mongodata/logs/rs1.log --port 27011 --directoryperdb --syncdelay 15 --fork
[root@se122 ~]#
[root@se121 ~]# iostat -txk 2 #使用該命令可以持續獲得磁碟IO使用情況
Linux 3.10.0-327.10.1.el7.x86_64 (se121) 08/09/2016 _x86_64_ (32 CPU)
08/09/2016 10:03:01 AM
avg-cpu: %user %nice %system %iowait %steal %idle
0.67 0.00 0.63 0.03 0.00 98.67
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 46.50 12.50 1170.00 98.25 42.99 0.18 3.03 3.83 0.04 0.56 3.30
dm-0 0.00 0.00 12.00 10.50 764.00 93.25 76.20 0.02 0.78 1.42 0.05 0.76 1.70
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 35.00 2.00 412.00 5.00 22.54 0.16 4.34 4.59 0.00 0.45 1.65
dm-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08/09/2016 10:03:03 AM
avg-cpu: %user %nice %system %iowait %steal %idle
0.81 0.00 0.49 1.17 0.00 97.53
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 2.50 966.50 28.00 6724.00 138.75 13.80 1.28 1.29 1.33 0.00 0.93 92.95
dm-0 0.00 0.00 241.50 17.00 3672.00 79.00 29.02 0.38 1.46 1.56 0.00 1.30 33.70
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 725.00 13.50 3048.00 59.75 8.42 0.91 1.23 1.25 0.00 1.22 90.20
dm-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08/09/2016 10:03:05 AM
avg-cpu: %user %nice %system %iowait %steal %idle
0.30 0.00 0.23 0.09 0.00 99.37
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 809.00 2.50 3312.50 7.00 8.18 0.88 1.09 1.09 0.20 1.08 87.70
dm-0 0.00 0.00 4.50 0.50 18.50 2.00 8.20 0.01 1.10 1.22 0.00 0.60 0.30
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 804.50 2.00 3294.00 5.00 8.18 0.88 1.09 1.09 0.25 1.09 88.20
dm-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
[BEGIN] 2016/8/9 10:06:26
free -s 10 -m 10 #使用該命令可以持續獲得主機記憶體、快取的使用資料
total used free shared buff/cache available
Mem: 128662 15784 110015 137 2862 112370
Swap: 4095 28 4067
total used free shared buff/cache available
Mem: 128662 16595 109069 137 2998 111560
Swap: 4095 28 4067
。
。
。
total used free shared buff/cache available
Mem: 128662 49774 70199 137 8689 78381
Swap: 4095 28 4067
經過單位換算後,就可以完成測試總覽表格了。
總結,文件聚合最佳化,使得資料相對集中,有利於mongodb的順序讀,對於需要mongodb短時間內載入大量資料到記憶體或獲取到應用伺服器是有利的。
宣告:實驗過程、結果及對mongodb認識,如果有不妥的地方,我接受批評指正。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2123310/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫效能需求分析及評估模型資料庫模型
- OBC充電機測試效能評估
- 大資料測試 - 相關性評估大資料
- 【分享】如何評估 bug 的優先順序
- 多通道負載測試和效能評估?負載
- 逆變器的防孤島測試效能評估
- 幾種 SAP ABAP OData 服務的效能評估和測試工具介紹試讀版
- 初試MongoDB資料庫MongoDB資料庫
- 分散式資料庫的健康評估分散式資料庫
- 如何評估測試工時?
- 系統效能評價---效能評估
- 資料庫效能測試:sysbench用法詳解資料庫
- 【效能測試策略】系統調優由易到難的順序
- php與資料庫連線如何實現資料的順序和倒序PHP資料庫
- 一鍵獲取測試指令碼,輕鬆驗證“TSBS 時序資料庫效能基準測試報告”指令碼資料庫測試報告
- mysql之 sysbench0.4.12資料庫效能測試MySql資料庫
- 測試用例的優先順序
- postgresql無序uuid效能測試SQLUI
- Linux效能評估工具Linux
- JuiceFS 效能評估指南UI
- 效能測試解讀
- 效能測試之資料庫監控分析工具PMM資料庫
- MySQL log_timestamps引數與mysql資料庫讀取my.cnf的順序MySql資料庫
- pytest(4)-測試用例執行順序
- 順序表有序插入資料
- 5 測量資料庫效能資料庫
- MQTT 開放基準測試規範:全面評估你的 MQTT Broker 效能MQQT
- 想要完成系統效能評估? 試試【雲壓力測試 + APM】的端到端壓測解決方案
- 能否在Oracle資料庫表中指定列順序OKOracle資料庫
- MongoDB資料庫MongoDB資料庫
- 可用於資料庫對比評估的FURPS+模型資料庫模型
- 大資料測試與 傳統資料庫測試大資料資料庫
- NoSQLBooster for MongoDB Mac(MongoDB資料庫管理) 8.1.0無限試用版SQLMongoDBMac資料庫
- 資料庫測試指南資料庫
- KaiwuDB 多模資料庫-時序效能最佳化AI資料庫
- 網站安全評估滲透測試手法分析網站
- 通過sysbench工具實現MySQL資料庫的效能測試MySql資料庫
- 效能測試之資料庫監控分析工具Grafana+Prometheus資料庫GrafanaPrometheus
- 正式開源金融資料庫效能測試工具 Detabench-T 。資料庫