View
2.400
Download
0
Category
Preview:
DESCRIPTION
OSC2009Fukuokaでお話した際のスライドです。 Firebird2.5で新たに開発されたSuperClassicモードで、パフォーマンスがどれだけ改善されたのかを、MySQLやPostgreSQLとの比較を通じてお話ししました。
Citation preview
Firebird日本ユーザー会 はやしつとむ
Firebird2.5 がやってきた!~ MySQL 、 PostgreSQL とのパフォーマンス比
較~
OSC2009Fukuoka 版
04/10/2023Copyright(c) 2009 Firebird日本ユーザー会2
そもそも Firebird とは
【無償】
【有償】
InterBase4.x商用版
InterBase5.x
InterBase6.0
InterBase6.5
InterBase7.0,7.1
InterBase7.5
InterBase4.x LinuxFreeBSD版
InterBase6.0
OpenSource版
Firebird1.0
Firebird1.5
Firebird2.0
【機能的にほぼ同一】
【日本未発売】
■起源は Borland 社の商用 RDBMS interBase■ 一時オープン化されたソースから分岐■ 現在はそれぞれ別の進化をとげる
Firebird2.1
Firebird2.5
InterBase2007
InterBase2009
Now β
2
Firebird を作ったのは?
Copyright(c) 2009 Firebird 日本ユーザー会
生みの親 Jim Starkey ロシアの天才 Dmitry Yemanov
世界中の開発者とユーザーの皆さん
04/10/20233
04/10/2023Copyright(c) 2009 Firebird日本ユーザー会4
Firebird の市場シェア
ワールドワイドでは
MySQLvs
FirebirdMと Fと Pで「オープンソースデータベース御三家」
と呼びましょう!
EDC,2005,OpenSource RDBMS調査結果
情報提供: Evans Data Corporationhttp://www.evansdata.com/n2/pr/releases/EDCDB05_01.shtml
4
Firebird World Wide
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird Developer Day @Brazil 2009-07480 人も集まった!
Firebird World Conferrence @italy 2008-11夜中まで飲んで討論
04/10/20235
Firebird 2.5 beta2
Copyright(c) 2009 Firebird 日本ユーザー会
FB2.5 の主要な目標新しいスレッドモデルを実装すること
Supre ClassicSQL レベルの新機能は最低限 ( といいつつ結構ある )
CREATE/ALTER/DROP USER 文の追加ALTER VIEW and CREATE OR ALTER VIEW 文の追
加PSQL での AUTONOMOUS TRANSACTIONEXECUTE STATEMENT での外部データベース接続その他
2.5Alpha1 の時のリリースノートが 248kb しかなかったのに、 2.5Beta1 で 500kb 、 2.5Beta2 で 573kb とどんどん増えている・・・
6 04/10/20236
Firebird のアーキテクチャFirebird には、以下の 3 つのエンジンアーキテクチャが存在する。
アーキテクチャ プロセス スレッド キャッシュ
Super Server
1プロセス クライアント毎生成
単一プロセス規定値: 2048
Classic Server
クライアント毎生成
なし 各プロセス規定値: 75
Super Classic
1プロセス クライアント毎生成
各スレッド規定値: 75
New FB2.5
Copyright(c) 2009 Firebird 日本ユーザー会7
MySQL
PostgreSQL
04/10/20237
Database A
Database B
Process 1
Super Server
Client 1Client 1
Client 1Client 1
Client 1
Client 1Client 1
Client 1Client 1
Clientn
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread n 1Process only
have a cacheper Database
Security2.fdb
Copyright(c) 2009 Firebird 日本ユーザー会8 04/10/20238
Database A Database B
Process 1Process 1
Process 1Process 1
Process 1
Process 1Process 1
Process 1Process 1
Process n
Classic Server
Client 1Client 1
Client 1Client 1
Client 1
Client 1Client 1
Client 1Client 1
Clientn
Each Processes have own cache
Security2.fdb
Lock Manager
Copyright(c) 2009 Firebird 日本ユーザー会9 04/10/20239
Database A
Database B
Process 1
Super Classic
Client 1Client 1
Client 1Client 1
Client 1
Client 1Client 1
Client 1Client 1
Clientn
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Thread n
Each threads Have own cache
Security2.fdb
Copyright(c) 2009 Firebird 日本ユーザー会10 04/10/202310
Firebird 2.5 beta2
Copyright(c) 2009 Firebird 日本ユーザー会
その他の SQL 言語の機能追加
SIMILAR TO 正規表現のサポート (1BYTE 系のみ )ALTER COLUMN が計算項目で可能にVIEW の FROM 句に選択型ストアドプロシージャを指定
可能にLIST() 関数で区切り文字の指定が拡張された
Data-handling の機能拡張新しい組み込み関数: UUID CHAR(16) OCTETS
strings を RFC4122-compliant format に変換32-bit と 64-bit integers を hexadecimal での文字列
型数値や X-prefixed された文字列でのバイナリ表現への変換
11 04/10/202311
Firebird2.5 beta2
Copyright(c) 2009 Firebird 日本ユーザー会
管理機能の強化CREATE/ALTER/DROP USER 文の追加新 system role RDB$ADMIN が ODS 11.2 で追加され、 SYSDBA
権限をデータベース毎に他のユーザーに移譲出来るようになったモニタリングテーブルの拡張
Firebird2.1.1 では、 SYSDBA 以外の一般ユーザーは自分のコネクションに関する情報しか見ることが出来なかった。
Firebird2.5+Firebird2.1.2 以降では、「同じ接続ユーザー名」のコネクションに関する情報も見ることが出来る。
MON$MEMORY_USAGE 、 MON$CONTEXT_VARIABLES の新設
API の追加
SQL 文の実行時に、 SQL-2003 標準の 5 文字の SQLSTATE コードを返す
isc_dsql_free_statement API で、新たに DSQL_unprepare 定数を使用出来るようになった
12 04/10/202312
Firebird2.5 beta2
Copyright(c) 2009 Firebird 日本ユーザー会
国際化関係の機能追加CREATE DATABASE 文でデフォルトのコレーションを指定
出来るようになったUNICODE_FSS で不正なコードが許されなくなった。 UTF8
と同様の対応。GBAK のリストアスイッチに FIX_FSS_DATA and
FIX_FSS_METADATA が追加され、上記の対応をリストア時に取ることが出来るようになった。
Unicode にアクセント付の COLLATE が追加、 UNICODE_CI_AI
ALTER CHARACTER SET 文を追加キャラクタセットのデフォルトコレーションを変更出来るようになった
SJIS と EUCJ で厳格なチェックが行われるようになった。チェックルーチンは元々あったのを Active にした。
13 04/10/202313
DBBench
Copyright(c) 2009 Firebird 日本ユーザー会
PostgreSQL の pgbench を Firebird/MySQL へ移植
Delphi + dbExpress によるマルチスレッド実装dbExpress のドライバを切り替えれば他の DB へ
も応用可能単一のコード / バイナリで、現状 Firebird/
MySQL/PostgreSQL をテスト出来るGUI による設定が可能ものすごく手軽なデータベースベンチマーク
Firebird のベンチマークは、この他に TPC-R やAS3AP などがあります。
14 04/10/202314
TPC-B
Copyright(c) 2009 Firebird 日本ユーザー会
TPC とは、 Transaction Processing Performanc Counsil が定める標準ベンチマーク仕様
TPC-B は 1990 年制定、 95 年に非推奨となっている同種のトランザクションが多数並行するバッチ処理等を想定したテスト銀行の支店間取引をシュミレートしている
15 04/10/202315
Copyright(c) 2009 Firebird 日本ユーザー会
TPC-B対象のテーブルは 4 つ
create table branches(bid int not null,bbalance int,filler char(88));
create table tellers(tid int not null,bid int,tbalance int,filler char(84));
create table accounts(aid int not null,bid int,abalance int,filler char(84));
create table history(tid int,bid int,aid int,delta int,mtime timestamp,filler char(22))
04/10/20231616
Copyright(c) 2009 Firebird 日本ユーザー会
TPC-B
17
処理内容は以下の流れupdate accounts set abalance = abalance
+ :delta where aid = :aid;select abalance from accounts where aid
= :aid; update tellers set tbalance = tbalance
+ :delta where tid = :tid; update branches set bbalance = bbalance +
:delta where bid = :bid;insert into history(tid,bid,aid,delta)
values(:tid,:bid,:aid,:delta);
04/10/202317
Copyright(c) 2009 Firebird 日本ユーザー会
Scaling Factor
18
Scaling factor is test scaleScaling factor affects
Branch count equals scaling factorTeller count is scaling factor * 10Account count is scaling factor * 100,000
So I use scaling factor 100Branch is 100, Teller is 1000, Accounts is 10,000,000Firebird database almost 600MB, MySQL is almost
1.2GB
04/10/202318
Copyright(c) 2009 Firebird 日本ユーザー会
ベンチーク環境
HP製 ML115G5
AMD AthlonTM 1640B( 2.7GHz)
AMD PhenomTM 9350e( 2.0GHz)
ECC は付いてるけど512MB DDR2-6400
Non-ECC4GB DDR2-6400
HDD は標準の160GB のまま・・・
じゃんけんに買って手に入れて下さいね~
19 04/10/202319
Firebird2.1 vs Firebird2.5
@WindowsServer2008
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会20
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1SS vs Firebird 2.5SS
21
Firebird2.1 と Firebird2.5 の結果を比較
@Windows10 50 100
0.00 20.00 40.00 60.00 80.00
100.00 120.00 140.00 160.00 180.00 200.00
92.23 76.99
66.94
TPS
TPS
10 50 1000.00
20.00 40.00 60.00 80.00
100.00 120.00 140.00 160.00 180.00 200.00
112.87 88.83
74.77
TPS
TPS
04/10/202321
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1CS vs Firebird 2.5CS
22
Firebird2.1 と Firebird2.5 の結果を比較
@Windows10 50 100
0.00
50.00
100.00
150.00
200.00
138.49
107.13
67.35
TPS
TPS
10 50 1000.00
50.00
100.00
150.00
200.00
142.57
107.39
12.74
TPS
TPS
04/10/202322
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1SS vs Firebird 2.5 SC
23
Firebird2.1 と Firebird2.5 の結果を比較
@Windows10 50 100
0.00
50.00
100.00
150.00
200.00
112.87 88.83
74.77
TPS
TPS
10 50 1000.00
50.00
100.00
150.00
200.00
151.48
106.08 91.34
TPS
TPS
04/10/202323
Firebird2.1 vs Firebird2.5
@Linux CentOS5.3
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会24
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1SS vs Firebird 2.5SS
25
Firebird2.1 と Firebird2.5 の結果を比較
@Linux10 50 100
0.00
50.00
100.00
150.00
200.00
50.58 48.19 46.14
TPS
TPS
10 50 1000.00
50.00
100.00
150.00
200.00
51.68 46.56 43.06
TPS
TPS
引き分け
04/10/202325
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1CS vs Firebird 2.5CS
26
Firebird2.1 と Firebird2.5 の結果を比較
@Linux10 50 100
0.00
50.00
100.00
150.00
200.00
59.37 53.33 68.96
TPS
TPS
10 50 1000.00
50.00
100.00
150.00
200.00
57.40
13.64 7.30
TPS
TPS
04/10/202326
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1SS vs Firebird 2.5SC
27
Firebird2.1 と Firebird2.5 の結果を比較
@Linux10 50 100
0.00 20.00 40.00 60.00 80.00
100.00 120.00 140.00 160.00 180.00 200.00
50.58 48.19 46.14
TPS
TPS
04/10/202327
10 50 1000.00
50.00
100.00
150.00
200.00
51.94 51.84 45.57
TPS
TPS
MySQL5.1.40 vs Firebird2.5
@WindowsServer2008 &Linux CentOS5.3
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会28
with InnoDB
Copyright(c) 2009 Firebird 日本ユーザー会
MySQL 5.1 vs Firebird 2.5SC
29
MySQL5.1.40 と Firebird2.5 の結果を比較
@Windows10 50 100
0.00
50.00
100.00
150.00
200.00
58.53 74.47 77.16
TPS
TPS
10 50 1000.00
20.00 40.00 60.00 80.00
100.00 120.00 140.00 160.00 180.00 200.00
151.48
106.08 91.34
TPS
TPS
04/10/202329
with InnoDB
Copyright(c) 2009 Firebird 日本ユーザー会
MySQL 5.1 vs Firebird 2.5SC
30
MySQL5.1.40 と Firebird2.5 の結果を比較
@Linux10 50 100
0.00
50.00
100.00
150.00
200.00
87.41 86.42 86.86
TPS
TPS
10 50 1000.00
50.00
100.00
150.00
200.00
51.94 51.84 45.57
TPS
TPS
04/10/202330
with InnoDB
Copyright(c) 2009 Firebird 日本ユーザー会
MySQL 5.1 vs Firebird 1.5SS
31
MySQL5.1.40 と Firebird2.5 の結果を比較
@Linux10 50 100
0.00
50.00
100.00
150.00
200.00
87.41 86.42 86.86
TPS
TPS
10 50 1000.00
50.00
100.00
150.00
200.00
79.01 94.58
76.82
TPS
TPS
引き分け
04/10/202331
with InnoDB
PostgreSQL8.4 vs Firebird2.5
@WindowsServer2008 &Linux CentOS5.3
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会32
Copyright(c) 2009 Firebird 日本ユーザー会
PostgreSQL 8.4 vs Firebird 2.5CS
33
PostgreSQL8.4.1 と Firebird2.5 の結果を比較
@Windows10 50 100
0.00
50.00
100.00
150.00
200.00
61.29
112.35
65.98
TPS
TPS
10 50 1000.00
50.00
100.00
150.00
200.00
142.57
107.39
12.74
TPS
TPS
04/10/202333
Copyright(c) 2009 Firebird 日本ユーザー会
PostgreSQL 8.4 vs Firebird 2.5CS
34
PostgreSQL8.4.1 と Firebird2.5 の結果を比較
@Linux10 50 1000.00
20.00 40.00 60.00 80.00
100.00 120.00 140.00 160.00 180.00 200.00
54.72 56.96 46.60
TPS
TPS
10 50 1000.00
50.00
100.00
150.00
200.00
59.37 53.33 68.96
TPS
TPS
04/10/202334
Linux での Firebird が遅~~い!!
ファイルシステムが悪いんじゃないか?
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会3535
@Linux
10 50 1000.00
50.00
100.00
150.00
200.00
130.11 133.22 134.48
TPS
TPS
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird2.5SC で検証
36
Ext3 と XFS でパフォーマンスを測定
@Linux10 50 100
0.00 20.00 40.00 60.00 80.00
100.00 120.00 140.00 160.00 180.00 200.00
59.37 53.33 68.96
TPS
TPS
04/10/202336
Ext3 XFS
Copyright(c) 2009 Firebird 日本ユーザー会
Linux+XFSだと劇速! Firebird2.5SC
37
調子に乗って 500 クライアントもテスト!
@Linux10 50 100 500
0.00
50.00
100.00
150.00
200.00
130.11 133.22 134.48 134.51
TPS
TPS
04/10/202337
XFS
Copyright(c) 2009 Firebird 日本ユーザー会
Linux+XFS で MySQL は
38
MySQL5.1.40 も 500 クライアントまでテスト
@Linux04/10/202338
10 50 100 5000.00
50.00
100.00
150.00
200.00 155.35
117.35
75.36 93.77
TPS
TPS
XFS
Firebird
Copyright(c) 2009 Firebird 日本ユーザー会
Linux+XFS で PostgreSQL は
39
PostgreSQL8.4.1 も 500 クライアントまでテスト
@Linux04/10/202339
10 50 100 5000.00
50.00
100.00
150.00
200.00 177.15 166.19
69.15 64.97
TPS
TPS
XFS
Firebird
まとめ ベンチマークはあくまで目安なので、実際の運
用環境を想定して、データベースを選択しよう。
Firebird2.5 は、他の DB を比較しても遜色のない性能を発揮出来そう。
500 クライアント以上の高負荷環境でも通用するぞ~!
Copyright(c) 2009 Firebird 日本ユーザー会40 04/10/202340
Copyright(c) 2009 Firebird 日本ユーザー会
余談 LostUpdate
41
並行するトランザクションで、後から開始したトランザクションが先行するトランザクションのデータを上書きしてしまう現象
Lost Update は、 MySQL の Falcon を除いて、他の RDBMS では検出することが出来ない。
04/10/202341
MySQL にある thread_stackFirebird のスレッドモデルでは、 MySQL のよう
にスレッドのスタックサイズを変更出来ない。Windwos の既定値は 1MB とでかい。このサイズは OS によって結構違う。
Windows 1MBCentOS 16KBAIX32bit 96KBFreeBSD 4KBMacOSX 8KB
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会42
thread のスタックサイズを変更Firebird のソース中、 ThreadStart.cpp にこの辺
のことは書いてある。 Windows 用の_beginthreadex() API の第 2 パラメータを変更してベンチマークを取ってみた。
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会43
1MB コネクト
192KB コネクト
1MB TPS
192KB TPS
0 20 40 60 80 100120140160
100
100.3541912632
82
135.7
137
実行時間
実行時間
Copyright(c) 2009 Firebird 日本ユーザー会44 04/10/202344
Firebird の本が出ました!
翔泳社刊Firebird徹底入門
Presented by Tomneko
Special thanks to Q-tan
Recommended