From a083d364367d5971d1d22fcd78788f705abd2532 Mon Sep 17 00:00:00 2001 From: gaohongtao Date: Tue, 19 Jan 2016 20:43:20 +0800 Subject: [PATCH] add stress test doc --- data/chart.js | 108 +++++++++++ img/stress_test_arch.png | Bin 0 -> 45943 bytes index.html | 4 + index.xml | 167 +++++++++++++++++ index/index.html | 2 + post/architecture/index.html | 2 + post/features/index.html | 2 + post/index.html | 4 + post/index.xml | 167 +++++++++++++++++ post/restriction/index.html | 2 + post/roadmap/index.html | 2 + post/stress_test/index.html | 348 +++++++++++++++++++++++++++++++++++ post/user_guide/index.html | 2 + sitemap.xml | 5 + 14 files changed, 815 insertions(+) create mode 100644 data/chart.js create mode 100644 img/stress_test_arch.png create mode 100644 post/stress_test/index.html diff --git a/data/chart.js b/data/chart.js new file mode 100644 index 0000000000000..9c9378530edbd --- /dev/null +++ b/data/chart.js @@ -0,0 +1,108 @@ +var chartData = { + "compareQuery": { + labels: ["50", "100", "200", "300", "600"], + datasets: [ + { + label: "JDBC", + data: [1812, 3828, 5217, 7239, 7169] + }, { + label: "Sharding-JDBC", + data: [1591, 2547, 5062, 7284, 7151] + } + + ] + },"compareInsert": { + labels: ["50", "100", "200", "300", "600"], + datasets: [ + { + label: "JDBC", + data: [2520, 5860, 6420, 6200, 6250] + },{ + label: "Sharding-JDBC", + data: [2410, 4230, 5445, 5603, 5642] + } + + ] + },"compareUpdate": { + labels: ["50", "100", "200", "300", "600"], + datasets: [ + { + label: "JDBC", + data: [2430, 5712, 6557, 7773, 7561] + },{ + label: "Sharding-JDBC", + data: [2059, 2715, 4770, 7280, 7210] + } + + ] + }, "singleAndDubbleQuery": { + labels: ["50", "100", "200", "300", "600"], + datasets: [ + { + label: "双库", + data: [3724, 6246, 11480, 13107, 13960] + },{ + label: "单库", + data: [1591, 2547, 5062, 7284, 7151] + } + + ] + },"singleAndDubbleInsert": { + labels: ["50", "100", "200", "300", "600"], + datasets: [ + { + label: "双库", + data: [4021, 6807, 7911, 8109, 7619] + },{ + label: "单库", + data: [2410, 4230, 5445, 5603, 5642] + } + + ] + },"singleAndDubbleUpdate": { + labels: ["50", "100", "200", "300", "600"], + datasets: [ + { + label: "双库", + data: [2190, 4464, 9039, 10144, 11970] + },{ + label: "单库", + data: [2059, 2715, 4770, 7280, 7210] + } + ] + },"fatigueTest": { + labels: ["0", "1小时", "2小时", "3小时", "4小时", "5小时", "6小时", "7小时", "8小时"], + datasets: [ + { + label: "jvm堆大小", + data: [0, 567, 533, 587, 523, 546, 577 ,534,577] + } + ] + } +} + +var charStyle = [ + + { + backgroundColor: "rgba(246,179,107,0.2)", + borderColor: "rgba(246,179,107,1)", + pointBorderColor: "rgba(246,179,107,1)", + pointBackgroundColor: "#fff", + pointBorderWidth: 1, + pointHoverRadius: 5, + pointHoverBackgroundColor: "rgba(246,179,107,1)", + pointHoverBorderColor: "rgba(246,179,107,1)", + pointHoverBorderWidth: 2, + }, + { + backgroundColor: "rgba(61,134,198,0.2)", + borderColor: "rgba(61,134,198,1)", + pointBorderColor: "rgba(61,134,198,1)", + pointBackgroundColor: "#fff", + pointBorderWidth: 1, + pointHoverRadius: 5, + pointHoverBackgroundColor: "rgba(61,134,198,1)", + pointHoverBorderColor: "rgba(61,134,198,1)", + pointHoverBorderWidth: 2, + } +] \ No newline at end of file diff --git a/img/stress_test_arch.png b/img/stress_test_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..2220631535e2f2136d07ceb92606c2b18586d41c GIT binary patch literal 45943 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html index e1fd70012088c..c345859655d66 100644 --- a/index.html +++ b/index.html @@ -321,6 +321,8 @@

相关文档

+
  • 压力测试报告
  • +
  • 未来线路规划
  • @@ -356,6 +358,8 @@

    相关文档

    + + diff --git a/index.xml b/index.xml index 1024551b035b5..83c0ef6b1deb6 100644 --- a/index.xml +++ b/index.xml @@ -781,6 +781,173 @@ public Collection&lt;String&gt; doSharding(final Collection&lt;Strin + + 压力测试报告 + http://dangdangdotcom.github.io/sharding-jdbc/post/stress_test/ + Fri, 08 Jan 2016 16:14:21 +0800 + + http://dangdangdotcom.github.io/sharding-jdbc/post/stress_test/ + + +<h1 id="压力测试报告:da68abc810593941936aaba3d62b3b96">压力测试报告</h1> + +<h2 id="测试目的:da68abc810593941936aaba3d62b3b96">测试目的</h2> + +<p>对<code>Sharding-JDBC</code>进行性能测试,客观、公正评估系统的性能,目的有三:</p> + +<ol> +<li>对比<code>Sharding-JDBC</code>和<code>JDBC</code>的性能。</li> +<li><code>Sharding-JDBC</code>是否通过扩展数据库解决<code>JDBC</code>吞吐量不足的问题。</li> +<li><code>Sharding-JDBC</code>的稳定性。</li> +</ol> + +<h2 id="测试数据库配置:da68abc810593941936aaba3d62b3b96">测试数据库配置</h2> + +<table> +<thead> +<tr> +<th>数据库实例</th> +<th align="center">DB1</th> +<th align="center">DB2</th> +</tr> +</thead> + +<tbody> +<tr> +<td>操作系统</td> +<td align="center">centOS5.4</td> +<td align="center">centOS5.4</td> +</tr> + +<tr> +<td>CPU</td> +<td align="center">2C四核</td> +<td align="center">2C四核</td> +</tr> + +<tr> +<td>内存</td> +<td align="center">32GB</td> +<td align="center">32GB</td> +</tr> + +<tr> +<td>硬盘</td> +<td align="center">250G*2_RAID1+600G*4_RAID10</td> +<td align="center">250G*2_RAID1+600G*4_RAID10</td> +</tr> + +<tr> +<td>Mysql版本</td> +<td align="center">5.5.19</td> +<td align="center">5.5.19</td> +</tr> + +<tr> +<td>数据表字段数量</td> +<td align="center">70</td> +<td align="center">70</td> +</tr> + +<tr> +<td>数据表行数</td> +<td align="center">1000万</td> +<td align="center">1000万</td> +</tr> +</tbody> +</table> + +<h2 id="网络拓扑:da68abc810593941936aaba3d62b3b96">网络拓扑</h2> + +<p><img src="img/stress_test_arch.png" alt="网络拓扑图" /></p> + +<h2 id="单库情况下sharding-jdbc与jdbc性能对比:da68abc810593941936aaba3d62b3b96">单库情况下Sharding-JDBC与JDBC性能对比</h2> + +<p>测试结论:</p> + +<ul> +<li>查询操作,Sharding-JDBC的TPS为JDBC的TPS的99.8%</li> +<li>插入操作,Sharding-JDBC的TPS为JDBC的TPS的90.2%</li> +<li>更新操作,Sharding-JDBC的TPS为JDBC的TPS的93.1%</li> +</ul> + +<h3 id="查询:da68abc810593941936aaba3d62b3b96">查询</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="compareQuery" width="400" height="150"></canvas> + +<h3 id="插入:da68abc810593941936aaba3d62b3b96">插入</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="compareInsert" width="400" height="150"></canvas> + +<h3 id="更新:da68abc810593941936aaba3d62b3b96">更新</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="compareUpdate" width="400" height="150"></canvas> + +<h2 id="sharding-jdbc单库与双库性能对比:da68abc810593941936aaba3d62b3b96">Sharding-JDBC单库与双库性能对比</h2> + +<p>对比测试:</p> + +<ul> +<li>单库用例中所有数据全部在DB1中</li> +<li>双库用例中所有数据均匀分布在DB1与DB2中</li> +</ul> + +<p>结论:</p> + +<ul> +<li>TPS双库比单库可以增加大约94%的性能</li> +<li>TPS双库比单库可以增加大约50%的性能</li> +</ul> + +<h3 id="查询-1:da68abc810593941936aaba3d62b3b96">查询</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="singleAndDubbleQuery" width="400" height="150"></canvas> + +<h3 id="插入-1:da68abc810593941936aaba3d62b3b96">插入</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="singleAndDubbleInsert" width="400" height="150"></canvas> + +<h3 id="更新-1:da68abc810593941936aaba3d62b3b96">更新</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="singleAndDubbleUpdate" width="400" height="150"></canvas> + +<h2 id="sharding-jdbc疲劳测试:da68abc810593941936aaba3d62b3b96">Sharding-JDBC疲劳测试</h2> + +<p>经过8个小时的疲劳测试,jvm的堆大约占用不到600MB的内存,且使用量比较稳定。没有发生fullgc。 +<canvas id="fatigueTest" width="400" height="150"></canvas></p> + + + 未来线路规划 http://dangdangdotcom.github.io/sharding-jdbc/post/roadmap/ diff --git a/index/index.html b/index/index.html index 8e4da46c172a5..401ab7ff9b4a3 100644 --- a/index/index.html +++ b/index/index.html @@ -318,6 +318,8 @@

    + + diff --git a/post/architecture/index.html b/post/architecture/index.html index 39c05397c92a8..3247f8dab7986 100644 --- a/post/architecture/index.html +++ b/post/architecture/index.html @@ -159,6 +159,8 @@

    架构图

    + + diff --git a/post/features/index.html b/post/features/index.html index 426a1a0d83382..f70f2857410b3 100644 --- a/post/features/index.html +++ b/post/features/index.html @@ -207,6 +207,8 @@

    稳定性

    + + diff --git a/post/index.html b/post/index.html index 090ca79d14069..68537818cb5a0 100644 --- a/post/index.html +++ b/post/index.html @@ -113,6 +113,8 @@

    相关文档

  • 使用限制
  • +
  • 压力测试报告
  • +
  • 未来线路规划
  • @@ -148,6 +150,8 @@

    相关文档

    + + diff --git a/post/index.xml b/post/index.xml index 3ea5b1b5a1491..53fc24e35e8b9 100644 --- a/post/index.xml +++ b/post/index.xml @@ -609,6 +609,173 @@ public Collection&lt;String&gt; doSharding(final Collection&lt;Strin
    + + 压力测试报告 + http://dangdangdotcom.github.io/sharding-jdbc/post/stress_test/ + Fri, 08 Jan 2016 16:14:21 +0800 + + http://dangdangdotcom.github.io/sharding-jdbc/post/stress_test/ + + +<h1 id="压力测试报告:da68abc810593941936aaba3d62b3b96">压力测试报告</h1> + +<h2 id="测试目的:da68abc810593941936aaba3d62b3b96">测试目的</h2> + +<p>对<code>Sharding-JDBC</code>进行性能测试,客观、公正评估系统的性能,目的有三:</p> + +<ol> +<li>对比<code>Sharding-JDBC</code>和<code>JDBC</code>的性能。</li> +<li><code>Sharding-JDBC</code>是否通过扩展数据库解决<code>JDBC</code>吞吐量不足的问题。</li> +<li><code>Sharding-JDBC</code>的稳定性。</li> +</ol> + +<h2 id="测试数据库配置:da68abc810593941936aaba3d62b3b96">测试数据库配置</h2> + +<table> +<thead> +<tr> +<th>数据库实例</th> +<th align="center">DB1</th> +<th align="center">DB2</th> +</tr> +</thead> + +<tbody> +<tr> +<td>操作系统</td> +<td align="center">centOS5.4</td> +<td align="center">centOS5.4</td> +</tr> + +<tr> +<td>CPU</td> +<td align="center">2C四核</td> +<td align="center">2C四核</td> +</tr> + +<tr> +<td>内存</td> +<td align="center">32GB</td> +<td align="center">32GB</td> +</tr> + +<tr> +<td>硬盘</td> +<td align="center">250G*2_RAID1+600G*4_RAID10</td> +<td align="center">250G*2_RAID1+600G*4_RAID10</td> +</tr> + +<tr> +<td>Mysql版本</td> +<td align="center">5.5.19</td> +<td align="center">5.5.19</td> +</tr> + +<tr> +<td>数据表字段数量</td> +<td align="center">70</td> +<td align="center">70</td> +</tr> + +<tr> +<td>数据表行数</td> +<td align="center">1000万</td> +<td align="center">1000万</td> +</tr> +</tbody> +</table> + +<h2 id="网络拓扑:da68abc810593941936aaba3d62b3b96">网络拓扑</h2> + +<p><img src="img/stress_test_arch.png" alt="网络拓扑图" /></p> + +<h2 id="单库情况下sharding-jdbc与jdbc性能对比:da68abc810593941936aaba3d62b3b96">单库情况下Sharding-JDBC与JDBC性能对比</h2> + +<p>测试结论:</p> + +<ul> +<li>查询操作,Sharding-JDBC的TPS为JDBC的TPS的99.8%</li> +<li>插入操作,Sharding-JDBC的TPS为JDBC的TPS的90.2%</li> +<li>更新操作,Sharding-JDBC的TPS为JDBC的TPS的93.1%</li> +</ul> + +<h3 id="查询:da68abc810593941936aaba3d62b3b96">查询</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="compareQuery" width="400" height="150"></canvas> + +<h3 id="插入:da68abc810593941936aaba3d62b3b96">插入</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="compareInsert" width="400" height="150"></canvas> + +<h3 id="更新:da68abc810593941936aaba3d62b3b96">更新</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="compareUpdate" width="400" height="150"></canvas> + +<h2 id="sharding-jdbc单库与双库性能对比:da68abc810593941936aaba3d62b3b96">Sharding-JDBC单库与双库性能对比</h2> + +<p>对比测试:</p> + +<ul> +<li>单库用例中所有数据全部在DB1中</li> +<li>双库用例中所有数据均匀分布在DB1与DB2中</li> +</ul> + +<p>结论:</p> + +<ul> +<li>TPS双库比单库可以增加大约94%的性能</li> +<li>TPS双库比单库可以增加大约50%的性能</li> +</ul> + +<h3 id="查询-1:da68abc810593941936aaba3d62b3b96">查询</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="singleAndDubbleQuery" width="400" height="150"></canvas> + +<h3 id="插入-1:da68abc810593941936aaba3d62b3b96">插入</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="singleAndDubbleInsert" width="400" height="150"></canvas> + +<h3 id="更新-1:da68abc810593941936aaba3d62b3b96">更新</h3> + +<ul> +<li>横坐标:并发用户数</li> +<li>纵坐标:TPS</li> +</ul> + +<canvas id="singleAndDubbleUpdate" width="400" height="150"></canvas> + +<h2 id="sharding-jdbc疲劳测试:da68abc810593941936aaba3d62b3b96">Sharding-JDBC疲劳测试</h2> + +<p>经过8个小时的疲劳测试,jvm的堆大约占用不到600MB的内存,且使用量比较稳定。没有发生fullgc。 +<canvas id="fatigueTest" width="400" height="150"></canvas></p> + + + 未来线路规划 http://dangdangdotcom.github.io/sharding-jdbc/post/roadmap/ diff --git a/post/restriction/index.html b/post/restriction/index.html index a617a60e5c900..c819c44096e32 100644 --- a/post/restriction/index.html +++ b/post/restriction/index.html @@ -242,6 +242,8 @@

    对于* + + diff --git a/post/roadmap/index.html b/post/roadmap/index.html index 7dbdadcb7507d..d77ba4cf9f827 100644 --- a/post/roadmap/index.html +++ b/post/roadmap/index.html @@ -165,6 +165,8 @@

    未来线路规划< + + diff --git a/post/stress_test/index.html b/post/stress_test/index.html new file mode 100644 index 0000000000000..ea901b896b8ae --- /dev/null +++ b/post/stress_test/index.html @@ -0,0 +1,348 @@ + + + + + + + + + + 压力测试报告 + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    + +
    + + +

    压力测试报告

    + +

    测试目的

    + +

    Sharding-JDBC进行性能测试,客观、公正评估系统的性能,目的有三:

    + +
      +
    1. 对比Sharding-JDBCJDBC的性能。
    2. +
    3. Sharding-JDBC是否通过扩展数据库解决JDBC吞吐量不足的问题。
    4. +
    5. Sharding-JDBC的稳定性。
    6. +
    + +

    测试数据库配置

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    数据库实例DB1DB2
    操作系统centOS5.4centOS5.4
    CPU2C四核2C四核
    内存32GB32GB
    硬盘250G*2_RAID1+600G*4_RAID10250G*2_RAID1+600G*4_RAID10
    Mysql版本5.5.195.5.19
    数据表字段数量7070
    数据表行数1000万1000万
    + +

    网络拓扑

    + +

    网络拓扑图

    + +

    单库情况下Sharding-JDBC与JDBC性能对比

    + +

    测试结论:

    + +
      +
    • 查询操作,Sharding-JDBC的TPS为JDBC的TPS的99.8%
    • +
    • 插入操作,Sharding-JDBC的TPS为JDBC的TPS的90.2%
    • +
    • 更新操作,Sharding-JDBC的TPS为JDBC的TPS的93.1%
    • +
    + +

    查询

    + +
      +
    • 横坐标:并发用户数
    • +
    • 纵坐标:TPS
    • +
    + + + +

    插入

    + +
      +
    • 横坐标:并发用户数
    • +
    • 纵坐标:TPS
    • +
    + + + +

    更新

    + +
      +
    • 横坐标:并发用户数
    • +
    • 纵坐标:TPS
    • +
    + + + +

    Sharding-JDBC单库与双库性能对比

    + +

    对比测试:

    + +
      +
    • 单库用例中所有数据全部在DB1中
    • +
    • 双库用例中所有数据均匀分布在DB1与DB2中
    • +
    + +

    结论:

    + +
      +
    • TPS双库比单库可以增加大约94%的性能
    • +
    • TPS双库比单库可以增加大约50%的性能
    • +
    + +

    查询

    + +
      +
    • 横坐标:并发用户数
    • +
    • 纵坐标:TPS
    • +
    + + + +

    插入

    + +
      +
    • 横坐标:并发用户数
    • +
    • 纵坐标:TPS
    • +
    + + + +

    更新

    + +
      +
    • 横坐标:并发用户数
    • +
    • 纵坐标:TPS
    • +
    + + + +

    Sharding-JDBC疲劳测试

    + +

    经过8个小时的疲劳测试,jvm的堆大约占用不到600MB的内存,且使用量比较稳定。没有发生fullgc。 +

    + +
    + +
    +
    +
    + + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/user_guide/index.html b/post/user_guide/index.html index 134459bdec146..9ec993469c633 100644 --- a/post/user_guide/index.html +++ b/post/user_guide/index.html @@ -597,6 +597,8 @@

    使用Shardin + + diff --git a/sitemap.xml b/sitemap.xml index f0af670039fb6..cce2919c29959 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -30,6 +30,11 @@ 2016-01-08T16:14:21+08:00 + + http://dangdangdotcom.github.io/sharding-jdbc/post/stress_test/ + 2016-01-08T16:14:21+08:00 + + http://dangdangdotcom.github.io/sharding-jdbc/post/roadmap/ 2016-01-08T16:14:21+08:00

  • 使用限制