1 前言html
每種測試工具都有其優勢和缺點,本次測試將採用兩種工具進行測試數據庫部分,藉助軟件自己提供的方法進行測試,沒有對特殊的業務進行邏輯測試。本次測試並不太關注業務表現的等待和性能問題,重點在於數據庫運行在雲主機所能承受的壓力,以及cpu、內存、磁盤在壓力期間的性能數據,業務測試返回的TPS、IOPS、RT等數據,以求對oracle運行在雲主機提供參考。前端
2 測試工具mysql
一、Sysbench,是一款開源的多線程性能測試工具,能夠執行CPU/內存/線程/IO/數據庫等方面的性能測試。數據庫目前支持MySQL/Oracle/PostgreSQL。Sysbench對於綁定變量的支持存在bug,但它的腳本都是lua語言寫的,徹底能夠自行設計和定製業務邏輯進行測試。 安裝方法見《附錄9.1》sql
二、swingbench,是Oracle UK的一個員工在一個被拋棄的項目的基礎上開發的。Swingbench可 以執行4種不一樣的標準測試(benchmark),擁有三種前端展現方式。Swingbench的開發目的主要是用來展現RAC的負載和測試,但也可用於單實例環境。 安裝方法見《附錄9.2》 兩種方法均在測試機上做爲客戶端對數據庫進行壓力測試。數據庫
3 測試環境服務器
測試阿里ECS+SSD+ORACLE的運行狀況。 服務器端配置 多線程
4 測試方法架構
Oracle redolog 建議和數據盤分開,本次測試將測試redolog和數據分開存放爲主,並測試redolog和數據在同一磁盤的一組數據做爲對比。由於表的數量少併發數越大,形成競爭和衝突率就大幅度上升,測試有隨機性,所以數據並不能準確反映應用的具體狀況,具體應用上線前建議根據業務邏輯設計LUA腳本或者Swingbench測試程序。併發
一、Sysbench Sysbench數據量初始化10張表,每張表100萬條數據,每次測試最大訪問條目是1000萬,隨機進行OLTP的讀寫更新和刪除,併發數據爲50、100、200、300、400、500併發值。oracle
二、Swingbench Swingbench也是經過腳本創建測試數據庫,相比Sysbench比較全面,從表空間、schema soe是一套訂單業務邏輯,同時能夠設置併發鏈接的登錄屬性—長鏈接仍是短鏈接。一樣,也進行50、100、200、300、400、500併發值測試。
5 Sysbench進行OS基準測試
一、 Cpu,經過計算最大素數的方式查看cpu的計算速度 /home/oracle/sysbench-0.5/sysbench/sysbench_ora --test=cpu --cpu-max-prime=20000 run total time: 36.4537s
二、 內存,測試內存的吞吐率 /home/oracle/sysbench-0.5/sysbench/sysbench --test=memory --num-threads=16 --memory-block-size=8192 --memory-total-size=1G run ----------------------------------------------------------------------------------
1024.00 MB transferred (2762.18 MB/sec)
三、 磁盤io,測試iops和吞吐率。
/u01 數據盤
/home/oracle/sysbench-0.5/sysbench/sysbench --test=fileio --num-threads=16 --init-rng=on --file-total-size=5G --file-test-mode=rndrw run
-----------------------------------------------------------------------------
5368709120 bytes written in 63.74 seconds (80.33 MB/sec). Read 93.734Mb Written 62.516Mb Total transferred 156.25Mb (31.643Mb/sec)
/u02 redolog
/home/oracle/sysbench-0.5/sysbench/sysbench --test=fileio --num-threads=16 --init-rng=on --file-total-size=5G --file-test-mode=rndrw run
------------------------------------------------------------------------------
5368709120 bytes written in 96.23 seconds (53.20 MB/sec). Read 93.812Mb Written 62.438Mb Total transferred 156.25Mb (24.582Mb/sec) 1573.25 Requests/sec executed 6
測試一:Sysbench 對Oracle進行壓測
6.1 準備數據
./sysbench_ora --test=/home/oracle/sysbench/tests/db/lua/oltp.lua \ --db-driver=oracle \
--oltp-table-name=sysbench \
--oltp-table-size=1000000 \ <<<每張表規格100萬行
--oltp-tables-count=10 \ <<<共10張表 --oracle-db=oradb \ <<<這是TNS的配置,SLB負載的TNS是oradbslb
--oracle-user=sysbench \
--oracle-password=XXXX \
--max-time=900 \ <<<測試時長
--max-requests=10000000 \<<<最大訪問1000萬行
--num-threads=40 \ --report-interval=10 \ prepare
6.2 壓測
--壓測語法
./sysbench_ora --test=/home/oracle/sysbench/tests/db/lua/oltp.lua \ --db-driver=oracle \
--oltp-table-name=sysbench \
--oltp-table-size=1000000 \
--oltp-tables-count=10 \
--oracle-db=oradb \
--oracle-user=sysbench \
--oracle-password=XXXX \
--max-time=900 \
--max-requests=10000000 \
--num-threads=40 \
--report-interval=10 \ run
--/50併發 transactions: 204610 (227.32 per sec.) read/write requests: 3682980 (4091.84 per sec.) response time: min: 24.70ms avg: 175.88ms max: 1070.85ms approx. 95 percentile: 256.37ms
--/100併發 transactions: 800926 (222.47 per sec.) read/write requests: 14416668 (4004.41 per sec.) response time: min: 20.03ms avg: 359.54ms max: 1766.33ms approx. 95 percentile: 543.96ms
--/200併發 transactions: 115286 (192.01 per sec.) read/write requests: 2075148 (3456.25 per sec.) response time: min: 84.64ms avg: 831.56ms max: 2552.42ms approx. 95 percentile: 1261.25ms
--/300併發 transactions: 121441 (202.12 per sec.) read/write requests: 2185938 (3638.24 per sec.) response time: min: 19.48ms avg: 1573.34ms max: 5466.92ms approx. 95 percentile: 2504.40ms
--/400併發 transactions: 121441 (207.12 per sec.) read/write requests: 2185938 (3638.24 per sec.) response time: min: 19.48ms avg: 1573.34ms max: 5466.92ms approx. 95 percentile: 2810.40ms
--/500併發 因爲oltp.lua腳本表少併發太多對象爭用太明顯,測試執行失敗,但咱們看到iops、tps數值穩定,rt跟線程多少有關。
7 測試二:Swingbench對Oracle進行壓力測試
Swingbench經過創建soe用戶,模擬產品、訂單業務,能夠自定義數據量大小,本次測試生成10G左右的數據文件。 --/併發50
--/併發100
此時產生了大量的log file sync和log file switch (checkpoint incomplete),redolog如今是6組256m,因爲commit頻繁,調整爲512M,9組。 --/併發200
此時測試一組redolog和數據在同一磁盤的情形
能夠看到cpu的io wait 比redo分開存放時明顯上升。 如今修改一下swingbench的讀寫權重,提升讀的比例,併發依然是200
磁盤io達到27M/s,TPS達到1839
--/併發300
--/併發400
--/併發500
8 評測結果 8.1 Sysbench的測試總結
Sysbench:iops
Swingbench的測試效果要比Sysbench的好,Sysbench適合自定義業務邏輯和編輯lua腳本。但Sysbench的測試結果也有一些參考: 一、 Redolog和和數據分開存放,從磁盤io的截圖能夠看到reodlog所在的磁盤(dev252-16/dev/vdb1)TPS很是高,放在數據盤勢必互相影響。 二、 對於批量小io的oltp業務,業務的頻繁訪問特性必須從業務邏輯設計上保證其性能,其次纔是主機性能、數據庫性能方面的優化配合。
8.2 Swingbench的測試總結
Swingbench:
同時收集了awr報告的數據 併發 邏輯讀/秒
一、iops在25000左右對於讀寫混合模式是一個理想值,只讀時能達到50000以上。
二、cpu成爲oltp環境的瓶頸,在400併發時性能嚴重不足,這時應考慮添加cpu計算能力
三、高併發環境redo和數據文件的IO都比較大,redolog同步和切換又影響數據的訪問和變化,所以redolog和數據文件分開存放,並且redolod更須要快速讀寫的磁盤。經過swingbench的數據能夠看到,磁盤IO壓力全集中在一個磁盤,並且IOPS明顯上升,TPS降低,響應時間增長,cpu等待也增高。
8.3 評測總結
結合以上的數據庫性能表現以及雲上Oracle壓測數據來看,雲主機的性能根據業務場景進行選擇,中配能夠支持300之內的併發,如圖:指標折線圖,隨着併發的增加,iops、cpu、tps會達到一個峯值,此時就是提高性能的時候。 redolog和數據庫盤建議分開,同時配置HA方案,可選ADG(Active Dataguard 實時同步並能夠支持查詢)經過業務指定部分查詢到Dataguard的只讀節點,分散壓力。 建議進行實際業務模擬測試,以觀察業務在雲上的表現,對ECS的選型和oracle架構進行評估。
參考《附錄 9.3 ECS官方性能指標》 指標折線圖
9 附錄
9.1 Sysbench的安裝
版本:0.5
測試方法:OLTP、LUA
root用戶安
$export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 $./autogen.sh
$./configure --with-oracle --without-mysql --without-drizzle
$make ORA_LIBS="-L$ORACLE_HOME/lib -lclntsh" ORA_CFLAGS="-I
$ORACLE_HOME/rdbms/demo –I
$ORACLE_HOME/rdbms/public"
$make install
9.2 Swingbench的安裝
其安裝介質下載地址: http://www.dominicgiles.com/swingbench.html 安裝方式: 1. 確保服務器上安裝配置了JDK1.6以上 2. 下載swingbench,解壓便可
9.3 ECS官方性能指標
Cpu系列 I 高配是16核64G,系列II 能夠達到32核 128G。 SSD雲盤4KB I/O塊大小時隨機讀寫IOPS高達12000、512KB I/O塊大小時順序讀寫吞吐量高達300MB。