Zabbixのデータベース
ベンチマークレポート
PostgreSQL vs MySQL

Yoshiharu MoriSRA OSS Inc. Japan

Agenda• はじめに• Simple test
大量のアイテムを設定• Partitioning test
パーティションイングを利用して計測
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

2

Zabbix DBの利用状況

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

3

PostgreSQLは遅い?
• 9.2でパフォーマンスが向上
9.1と比較するとo Read Query 4x 性能UPo Write Query 5x 性能UP参照:
PostgreSQL 9.2 release news
http://www.postgresql.org/about/news/1415/
Robert Haas@PGcon2012
Performance Improvement in PostgreSQL 9.2
http://www.pgcon.org/2012/schedule/events/416.en.html

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

4

MySQL vs PostgreSQL• MySQLとPostgreSQLでZabbixDBの検証を行いました• 環境
o Amazon EC2 M1 medium instanceo 3.75 Gib RAM
o 2ECU (1 core)o 410 GB instance storageo OS: Amazon Linux AMI 2013.03 (64bit)o 3 servers ( 1 for Zabbix server and DB ,2 for Zabbix Agent)

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

5

Software• Zabbix 2.1.1 ( alpha release)• 最新版の利用

o MySQL 5.6.12
o PostgreSQL 9.2.4
o Apache httpd 2.4.6o PHP 5.4.17

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

6

Test Target• 600 hostsをシミュレート ( 2 agent servers )• 26400 items(44 items/1 host,5秒間隔,保存期間1日)• 10200 triggers ( 17 triggers / 1 host )• 空のhistoryデータからスタート• 測定時間:
4 時間 (short run)
36 時間 (long run)
• Zabbix:
変更点 CacheSize=64M in zabbix_server.conf
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

7

Simple Test
• Test 1o 基本的にデフォルトDB設定• Test 2o バッファとトランザクションログの量を増やす• 測定内容o 4時間測定
o CPU利用率とZabbixパフォーマンスを測定

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

8

Test 1: default DB Config• MySQLo character-set-server=utf8
o skip-character-set-client-handshakeo innodb_file_per_table• PostgreSQLo 全てデフォルト
PostgreSQLは1つのテーブルに複数のファイルを利用

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

9

Test 1: Zabbix Performance
MySQL

PostgreSQL

zabbix[wcache,values] :Values processed by Zabbix server per second

zabbix[queue]:Zabbix queue

PG: Zabbix処理が遅延
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

10

Test 1: CPU utilization
MySQLUser

PostgreSQL
Systemiowait

PG:大量のio wait
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

11

Test 2: Tuning• バッファサイズとトランザクションログサイズの変更• MySQLo Innodb_beffer_pool_size = 512MB
o Innodb_log_file_size = 256MB
x innodb_log_files_in_group=2(default)= log size 512MB• PostgreSQLo Shared_buffers = 512MB
o checkpoint_segments = 32
16MB/each segmnet →log size 512MB

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

12

Test 2: Zabbix Performance
MySQL

PostgreSQL

zabbix[wcache,values] :Values processed by Zabbix server per second

zabbix[queue]:Zabbix queue

ほとんど同じ性能
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

13

Test 2: CPU utilization
MySQL
UserPostgreSQL
Systemiowait

ほとんど同じ負荷状況 (PG: 若干ioが低く安定)
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

14

Compare DB Size
• Test 2 Case
• トランザクションログサイズは除外• MySQL : 3.3 GB• PostgreSQL : 3.2 GB• ほとんど同じ

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

15

Study of Simple Test
• デフォルトの設定では、MySQLの方が良好• バッファサイズとトランザクションログサイズを増やす
ことで、MySQLとPostgreSQLはほぼ同じ性能が出せる• DBサイズ増加傾向もほとんど同じ

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

16

Characteristic of Zabbix DB
書き込みが多く読み込みが少ない特性

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

17

Tuning Point• 書き込みが多いケースではCheckpointのチューニングが重要o 誤った設定は書き込み負荷が増大
o チェックポイントの契機• バッファあふれ• トランザクションログあふれ
o チェックポイントのチューニングは、バッファとトランザクションログのチューニングが基本中の基本
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

18

Zabbix DB Tuning• Zabbix DBは基本的に同じ頻度で書き込みを行う• DBサイズの成長速度を測る
今回のテストでは
3.2GB/4h ≒ 70MB/5min• DBサイズの成長速度から、十分なバッファ量とトランザクションログ量を設定する
今回のテストでは、下記の設定にて劇的な改善
バッファ512MB トランザクションログ量512MB
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

19

Partitioning Test
• DBチューニング内容
o バッファとトランザクションログ量

512MB• Test 3o housekeeper を有効にして、パーティションを未設定
o 36時間計測• Test 4o housekeeperを無効
o 36時間計測

1日単位でパーティショニング• CPU利用率とZabbixパフォーマンスを計測

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

20

Test 3: Zabbix Performance
MySQL

PostgreSQL

zabbix[wcache,values] :Values processed by Zabbix server per second

zabbix[queue]:Zabbix queue

PostgreSQLは比較的安定稼働
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

21

Test 3: CPU utilization
MySQLUser

PostgreSQL
Systemiowait

housekeeperによる大量のIOが発生
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

22

Test 4 Partitioning• housekeeper無効• Historyテーブルに対して1日(レンジ)パーティションの利用• PostgreSQLのパーティショニングサポート状況
o テーブル継承を利用
o トリガーやルールが必要
親テーブルにinsertされたデータを適切な子テーブルにリダイレクトする
o パフォーマンスはトリガーやルールの設定にも依存o ここでは、以下のトリガーを利用• pl/pgsql• C関数 (heap_insert method)
https://github.com/matheusoliveira/pg_partitioning_tests
Developed by Matheus de Oliveira

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

23

Test 4: Zabbix Performance
MySQL

PG(pl/pgsql)

zabbix[wcache,values] :Values processed by Zabbix server per second

zabbix[queue]:Zabbix queue

ほとんど同じ性能
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

24

Test 4: CPU utilization
MySQL
User

PG(pl/pgsql)
SystemiowaitPG(pl/pgsql)は3倍のCPU(user)利用率
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

25

Test 4: Zabbix PerformanceMySQL

PG(C lang)zabbix[wcache,values] :Values processed by Zabbix server per second

zabbix[queue]:Zabbix queue

ほとんど同じ性能
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

26

Test 4: CPU utilization
MySQL
User

PG(C lang)
Systemiowait

PG(C言語)を利用することでPG(pl/pgsql)よりCPU利用率が約20%低下したがMySQLの方がCPU利用率が低い
Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

27

Conclusion• In our testo Zabbix DBとしてMySQLとPostgreSQLは、ほぼ同じ性能を出せる
o Checkpointのチューニングは必須(バッファとトランザクションログ)o MySQLのパーティションは簡単でCPU利用率が低い(*)ただしPostgreSQLは外部キーが張られているテーブルに対してもパーティションが可能

o PostgreSQLはIO過多な状況でも比較的安定稼働

Copyright © 2013 SRA OSS, Inc. Japan All rights reserved.

28