1. 程式人生 > >PostgreSQL和MySQL的效能對比實驗

PostgreSQL和MySQL的效能對比實驗

測試資料庫schema:

drop table if exists t1;

drop table if exists t2;

drop table if exists t3;

create table t1(id int primary key, value1 int, value2 varchar(200));

create index s1 on t1(value1);

create table t2(id int primary key, value1 int, value2 varchar(200));

create index s2 on t2(value1);

create table t3(id int primary key, value1 int, value2 varchar(200));

create index s3 on t3(value1);

t1:1000萬行;t2:1億行;t3:3億行。

id是連續的;value1為0 - 1000000000之間的隨機值;value2為平均長度為100,最大長度為200的字串。

PG和MySQL的配置請看:

測試負載:

1.      單表上的不同型別讀負載

單點(主鍵)隨機讀負載

主鍵範圍讀負載

非主鍵的讀(二級索引讀)負載

2.      短事務

單行更新操作(insert、delete、replace、update)

QPS:每秒查詢數

QRS:查詢響應時間(單位為ms)

TPS:每秒事務數

TRS:事務響應時間(單位為ms)

統計表中第二欄的響應時間與第一欄的每秒運算元按順序一一對應

實驗一

實驗目的:測試MySQL和PG針對主鍵隨機讀負載的最優吞吐量。

測試負載:select value1 from table where id = ?,以預編譯的形式執行,id是在主鍵範圍上均勻分佈。

MySQL:

資料表t1:

執行緒數

QPS

QRS

10

35522, 36419

0.285, 0.279

20

64540, 64716

0.314, 0.313

50

107399, 105946

0.473, 0.480

100

109425, 110050

0.922, 0.917

150

109569, 111209

1.381, 1.361

200

115449, 115601

1.747, 1.744

250

116336, 116004

2.167, 2.173

300

115520, 115265

2.626, 2.629

資料表t2:

執行緒數

QPS

QRS

10

2679, 35821

3.735, 0.282

20

22583, 63940

0.889, 0.316

50

81851, 107456

0.619, 0.474

100

94480, 109425

1.068, 0.921

150

108686, 109180

1.390, 1.387

200

116322, 115101

1.733, 1.751

250

116211, 114987

2.168, 2.190

300

115134, 114702

2.630, 2.643

資料表t3:

執行緒數

QPS

QRS

10

1110, 30518

8.989, 0.331

20

3717, 52904

5.369, 0.384

50

18882, 75080

2.655, 0.675

100

42844, 87145

2.342, 1.156

150

98669, 91366

1.530, 1.654

200

61733, 88915

3.247, 2.259

250

67503, 85314

3.712, 2.942

300

88601, 84400

3.407, 3.570

PG:

資料表t1:

執行緒數

QPS

QRS

10

37879, 38148, 12728, 38237

0.275, 0.266, 0.790, 0.265

20

75037, 68906, 78759, 77142

0.273, 0.294, 0.261, 0.265

50

139676, 135779, 137780, 135497

0.366, 0.375, 0.371, 0.377

100

181549, 185476, 175890, 173170

0.560, 0.548, 0.580, 0.588

150

222857, 219711, 230571, 204284

0.695, 0.698, 0.670, 0.751

200

245709, 231214, 245812, 240065

0.834, 0.878, 0.836, 0.851

250

246533, 228139, 248405, 238104

1.044, 1.115, 1.041, 1.075

300

246229, 237196, 239975, 226885

1.259, 1.302, 1.294, 1.357

資料表t2:

執行緒數

QPS

QRS

10

30784, 37991, 917, 35821

0.329, 0.274, 10.867, 0.282

20

54830, 70700, 7591, 72989

0.370, 0.287, 2.636, 0.280

50

122400, 136795, 91058, 137434

0.417, 0.374, 0.558, 0.372

100

131690, 180934, 132992, 179460

0.768, 0.563, 0.780, 0.567

150

152968, 206199, 196900, 217128

0.993, 0.743, 0.776, 0.706

200

182414, 221721, 221870, 221576

1.112, 0.924, 0.921, 0.921

250

212466, 225449, 221794, 215628

1.210, 1.142, 1.154, 1.184

300

168306, 212136, 211857, 206145

1.813, 1.455, 1.456, 1.491

資料表t3:

執行緒數

QPS

QRS

10

330, 1958, 961, 5021

29.612, 5.097, 10.348, 1.993

20

1728, 4049, 4533, 31004

11.522, 4.935, 4.406, 0.649

50

3158, 6568, 7593, 83657

15.717, 7.596, 6.574, 0.606

100

3520, 25436, 9688, 108118

27.875, 3.933, 10.279, 0.934

150

3600, 23254, 10862, 121425

40.687, 6.445, 13.718, 1.247

200

3497, 70062, 14395, 124518

55.519, 2.862, 13.801, 1.618

250

3500, 121358, 10639, 27538

69.554, 2.096, 23.299, 9.050

300

3321, 19276, 6610, 99964

84.137, 15.477, 44.068, 3.024

實驗二

實驗目的:測試MySQL和PG針對主鍵範圍讀負載的最優吞吐量。

測試負載:select value1 from table where id between ? and ?,以預編譯的形式執行,第一個id在主鍵範圍上均勻分佈,range大小為0- 100的一個隨機值。

MySQL:

資料表t1:

執行緒數

QPS

QRS

10

22452, 25006

0.449, 0.403

20

43140, 43006

0.468, 0.472

50

70608, 70080

0.715, 0.721

100

94768, 95183

1.063, 1.059

150

97737, 97151

1.545, 1.555

200

97927, 98472

2.050, 2.040

250

98619, 99345

2.547, 2.530

300

100064, 99955

3.017, 3.021

資料表t2:

執行緒數

QPS

QRS

10

2570, 24857

3.884, 0.405

20

29401, 42460

0.684, 0.477

50

61110, 70015

0.827, 0.720

100

94516, 94408

1.067, 1.068

150

96446, 96910

1.567, 1.561

200

97494, 97542

2.061, 2.060

250

97760, 97704

2.570, 2.571

300

98889, 98637

3.054, 3.062

資料表t3:

執行緒數

QPS

QRS

10

9572, 21742

1.047, 0.463

20

20050, 33051

1.001, 0.610

50

21181, 36658

2.364, 1.370

100

27500, 30698

3.639, 3.260

150

29248, 31415

5.138, 4.777

200

28920, 31580

6.901, 6.331

250

28576, 31648

8.737, 7.899

300

28379, 28405

10.547, 10.535

PG:

資料表t1:

執行緒數

QPS

QRS

10

9186, 16412

1.091, 0.613

20

25985, 25271

0.775, 0.797

50

46036, 46076

1.094, 1.095

100

53837, 53283

1.868, 1.886

150

58129, 58131

2.594, 2.593

200

57260, 57216

3.501, 3.504

250

56566, 57160

4.431, 4.386

300

55157, 55696

5.458, 5.404

資料表t2:

執行緒數

QPS

QRS

10

669, 23234

14.835, 0.436

20

1546, 38537

12.839, 0.523

50

60498, 77893

0.835, 0.650

100

80612, 94784

1.255, 1.068

150

93270, 93079

1.622, 1.625

200

89407, 89216

2.250, 2.255

250

81304, 79588

3.092, 3.157

300

75970, 64522

3.969, 4.672

資料表t3:

執行緒數

QPS

QRS

10

478, 22644

20.777, 0.444

20

6711, 36593

2.981, 0.550

50

6810, 57875

7.325, 0.871

100

11043, 61672

9.021, 1.630

150

64012, 62183

2.354, 2.423

200

56233, 55116

3.561, 3.634

250

49752, 50874

5.033, 4.923

300

46629, 46937

6.442, 6.402

實驗三

實驗目的:測試MySQL和PG針對非主鍵隨機讀(二級索引讀)負載的最優吞吐量。

測試負載:select * from table where value1 = ?,以預編譯的形式執行,value1為0- 1000000000之間的隨機值。

MySQL:

資料表t1:

執行緒數

QPS

QRS

10

29816, 31100

0.340, 0.325

20

54376, 55684

0.372, 0.362

50

84479, 87363

0.600, 0.577

100

91269, 93196

1.117, 1.104

150

93550, 92525

1.631, 1.649

200

95492, 93564

2.124, 2.170

250

92432, 92742

2.738, 2.729

300

91378, 91544

3.314, 3.307

資料表t2:

執行緒數

QPS

QRS

10

12599, 31100

0.797, 0.325

20

29404, 53556

0.688, 0.377

50

54002, 78978

0.930, 0.637

100

63735, 71337

1.601, 1.436

150

63476, 84751

2.394, 1.801

200

94778, 94339

2.140, 2.151

250

92824, 90551

2.727, 2.793

300

91093, 87221

3.325, 3.473

資料表t3:

執行緒數

QPS

QRS

10

5766, 29885

1.735, 0.338

20

47508, 52086

0.425, 0.386

50

78072, 81274

0.644, 0.619

100

117900, 104350

0.879, 0.991

150

119688, 99406

1.293, 1.547

200

116280, 99048

1.749, 2.050

250

111753, 101421

2.272, 2.500

300

101104, 103070

3.001, 2.944

PG:

資料表t1:

執行緒數

QPS

QRS

10

34602, 42245, 26062, 38628

0.292, 0.242, 0.390, 0.269

20

65380, 75027, 63108, 62195

0.309, 0.271, 0.321, 0.329

50

133498, 145874, 127170, 86124

0.379, 0.347, 0.398, 0.586

100

198000, 200500, 199750, 115637

0.535, 0.527, 0.532, 0.897

150

224123, 212524, 222461, 153878

0.710, 0.743, 0.709, 1.006

200

270601, 276565, 270500, 168952

0.784, 0.768, 0.782, 1.219

250

278647, 287017, 278250, 197342

0.944, 0.924, 0.948, 1.304

300

269562, 283278, 271995, 277041

1.160, 1.123, 1.149, 1.140

資料表t2:

執行緒數

QPS

QRS

10

3048, 33721, 3097, 30111

3.280, 0.301, 3.227, 0.336

20

11063, 66795, 11013, 55440

1.810, 0.305, 1.817, 0.365

50

27153, 123778, 26733, 110513

1.843, 0.409, 1.872, 0.457

100

60388, 181340, 72942, 174132

1.685, 0.582, 1.403, 0.602

150

83470, 233631, 110977, 226715

1.827, 0.675, 1.383, 0.698

200

112169, 234799, 146271, 224762

1.816, 0.888, 1.404, 0.926

250

169017, 229063, 183515, 224988

1.517, 1.132, 1.402, 1.152

300

213542, 219782, 149234, 216786

1.445, 1.405, 2.051, 1.425

資料表t3:

執行緒數

QPS

QRS

10

1525, 16151, 2684, 10321

6.544, 0.623, 3.722, 0.970

20

12672, 30203, 7691, 19471

1.581, 0.667, 2.600, 1.031

50

23476, 70133, 14906, 53962

2.134, 0.717, 3.351, 0.930

100

50900, 134443, 16844, 114204

1.993, 0.770, 5.948, 0.906

150

63731, 137467, 20654, 153763

2.389, 1.122, 7.262, 1.008

200

41965, 100772, 28681, 153861

4.799, 2.022, 6.994, 1.334

250

31493, 69308, 22689, 88058

7.951, 3.651, 11.010, 2.882

300

26825, 42008, 16551, 50553

11.169, 7.168, 18.027, 5.962

實驗四

實驗目的:測試MySQL和PG針對單行更新insert負載的效能。

測試負載:insert into table values (?, ?, ?),以預編譯的形式執行,分別向資料表t1-t3最大主鍵後面亂序插入資料。

MySQL:

資料表t1:

執行緒數

TPS

TRS

10

9780, 9054

1.026, 1.108

20

10540, 15020

1.901, 1.338

50

13746, 19291

3.647, 2.622

100

19248, 19988

5.260, 5.040

150

15215, 18666

8.201, 8.053

200

16616, 16911

12.056, 11.873

250

16811, 16780

14.847, 14.873

300

16387, 17461

18.159, 17.168

資料表t2:

執行緒數

TPS

TRS

10

9027, 2933

1.112, 3.413

20

3187, 3627

6.262, 5.511

50

3626, 3662

13.674, 13.587

100

3665, 3689

27.047, 26.997

150

3451, 3600

42.603, 41.347

200

3400, 3402

57.620, 57.149

250

2657, 2587

90.501, 90.802

300

2700, 2769

103.547, 100.720

資料表t3:

執行緒數

TPS

TRS

10

1860, 780

5.431, 12.876

20

985, 1840

20.381, 10.948

50

650, 1747

73.945, 28.967

100

801, 1608

117.895, 60.001

150

795, 1688

166.787, 85.463

200

993, 1090

196.999, 167.334

250

1250, 1251

186.354, 182.215

300

1294, 1287

202.240, 204.294

PG:

資料表t1:

執行緒數

TPS

TRS

10

22322, 29616

0.453, 0.341

20

25984, 25011

0.780, 0.810

50

32649, 32544

1.555, 1.563

100

38058, 37790

2.671, 2.689

150

36300, 38201

4.188, 3.977

200

35039, 39091

5.813, 5.210

250

38826, 39566

6.564, 6.442

300

39369, 38639

7.716, 7.863

資料表t2:

執行緒數

TPS

TRS

10

1780, 17547

5.606, 0.581

20

4816, 27066

4.157, 0.754

50

10588, 10246

4.736, 4.907

100

6615, 34539

15.045, 2.943

150

17732, 36897

8.488, 4.114

200

9066, 13647

21.873, 14.652

250

37037, 35813

6.870, 7.092

300

13841, 37389

21.585, 8.106

資料表t3:

執行緒數

TPS

TRS

10

1467, 181

6.853, 53.855

20

2042, 655

9.902, 30.181

50

1424, 2185

34.748, 22.945

100

582, 4969

158.765, 20.586

150

1050, 4388

132.584, 34.757

200

2263, 3313

86.446, 59.566

250

2067, 2551

117.791, 97.917

300

2628, 1604

110.286, 178.498

實驗五

實驗目的:測試MySQL和PG針對單行更新delete負載的效能。

測試負載:delete from table where id = ?,以預編譯的形式執行,亂序地將實驗四插入的資料刪掉。

MySQL:

資料表t1:

執行緒數

TPS

TRS

10

7540, 9054, 8738, 8928

1.328, 1.108, 1.146, 1.123

20

10165, 12498, 12300, 12308

1.980, 1.609, 1.636, 1.632

50

14906, 14700, 15040, 14842

3.380, 3.425, 3.346, 3.389

100

15173, 15399, 15596, 15698

6.630, 6.511, 6.447, 6.409

150

15215, 15085, 15460, 15408

9.910, 9.978, 9.752, 9.770

200

14698, 14913, 15197, 15080

13.639, 13.393, 13.128, 13.265

250

14631, 14323, 14640, 14425

16.991, 17.364, 16.962, 17.178

300

14086, 13971, 14215, 13908

21.209, 21.379, 21.056, 21.439

資料表t2:

執行緒數

TPS

TRS

10

4458, 2585, 2568, 2589

2.244, 3.867, 3.892, 3.862

20

2596, 2647, 2614, 2638