new firebird2.5.20100123
DESCRIPTION
OSC2010/Oita での講演資料です。TRANSCRIPT
Firebird日本ユーザー会 はやしつとむ
Firebird2.5 がやってきた!~ MySQL 、 PostgreSQL とのパフォーマンス比
較~
OSC2010/Oita 版
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
InterBase は M1 エイブラムス戦車に搭載されていた
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会3
Firebird を作ったのは?
Copyright(c) 2009 Firebird 日本ユーザー会
生みの親 Jim Starkey ロシアの天才 Dmitry Yemanov
世界中の開発者とユーザーの皆さん
04/10/20234
04/10/2023Copyright(c) 2009 Firebird日本ユーザー会5
Firebird の市場シェア
ワールドワイドでは
MySQLvs
FirebirdMと Fと Pで「オープンソースデータベース御三家」
と呼びましょう!
EDC,2005,OpenSource RDBMS調査結果
情報提供: Evans Data Corporationhttp://www.evansdata.com/n2/pr/releases/EDCDB05_01.shtml
5
Firebird World Wide
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird Developer Day @Brazil 2009-07480 人も集まった!
Firebird World Conferrence @italy 2008-11夜中まで飲んで討論
04/10/20236
Firebird 2.5RC1
Copyright(c) 2009 Firebird 日本ユーザー会
FB2.5 の主要な目標新しいスレッドモデルを実装すること
Supre Classic エンジンSQL レベルの新機能は最低限 ( といいつつ結構ある )
CREATE/ALTER/DROP USER 文の追加PSQL での AUTONOMOUS TRANSACTIONEXECUTE STATEMENT での外部データベース接続
パフォーマンスの改善64bit 版では、 DB キャッシュが 32TB まで拡張!
2.5Alpha1 の時のリリースノートが 248kb しかなかったのに、 2.5Beta1 で 500kb 、 2.5Beta2 で 573kb 、 2.5RC1 で696kb とどんどん増えている・・・
7 04/10/20237
Firebird のアーキテクチャFirebird には、以下の 3 つのエンジンアーキテクチャが存在する。
アーキテクチャ プロセス スレッド キャッシュ
Super Server
1プロセス クライアント毎生成
単一プロセス規定値: 2048
Classic Server
クライアント毎生成
なし 各プロセス規定値: 75
Super Classic
1プロセス クライアント毎生成
各スレッド規定値: 75
New FB2.5
Copyright(c) 2009 Firebird 日本ユーザー会8
MySQL
PostgreSQL
04/10/20238
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 日本ユーザー会9 04/10/20239
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 日本ユーザー会10 04/10/202310
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 日本ユーザー会11 04/10/202311
Firebird2.5 RC1
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
Firebird 2.5 RC1
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 された文字列でのバイナリ表現への変換
13 04/10/202313
Firebird2.5 RC1
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 にした。(セキュリティ対策)14 04/10/202314
DBBench
Copyright(c) 2009 Firebird 日本ユーザー会
PostgreSQL の pgbench を Firebird/MySQL へ移植
Delphi + dbExpress によるマルチスレッド実装dbExpress のドライバを切り替えれば他の DB へ
も応用可能単一のコード / バイナリで、現状 Firebird/
MySQL/PostgreSQL をテスト出来るGUI による設定が可能ものすごく手軽なデータベースベンチマーク
Firebird のベンチマークは、この他に TPC-R やAS3AP などがあります。
15 04/10/202315
TPC-B
Copyright(c) 2009 Firebird 日本ユーザー会
TPC とは、 Transaction Processing Performanc Counsil が定める標準ベンチマーク仕様
TPC-B は 1990 年制定、 95 年に非推奨となっている同種のトランザクションが多数並行するバッチ処理等を想定したテスト銀行の支店間取引をシュミレートしている
16 04/10/202316
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/20231717
Copyright(c) 2009 Firebird 日本ユーザー会
TPC-B
18
処理内容は以下の流れ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/202318
Copyright(c) 2009 Firebird 日本ユーザー会
Scaling Factor
19
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/202319
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 のまま・・・
じゃんけんに買って手に入れて下さいね~
20 04/10/202320
Firebird2.1 vs Firebird2.5
@WindowsServer2008
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会21
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1SS vs Firebird 2.5SS
22
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/202322
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1CS vs Firebird 2.5CS
23
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/202323
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1SS vs Firebird 2.5 SC
24
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/202324
Firebird2.1 vs Firebird2.5
@Linux CentOS5.3
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会25
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1SS vs Firebird 2.5SS
26
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/202326
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1CS vs Firebird 2.5CS
27
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/202327
Copyright(c) 2009 Firebird 日本ユーザー会
Firebird 2.1SS vs Firebird 2.5SC
28
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/202328
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 日本ユーザー会29
with InnoDB
Copyright(c) 2009 Firebird 日本ユーザー会
MySQL 5.1 vs Firebird 2.5SC
30
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/202330
with InnoDB
Copyright(c) 2009 Firebird 日本ユーザー会
MySQL 5.1 vs Firebird 2.5SC
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
51.94 51.84 45.57
TPS
TPS
04/10/202331
with InnoDB
Copyright(c) 2009 Firebird 日本ユーザー会
MySQL 5.1 vs Firebird 1.5SS
32
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/202332
with InnoDB
PostgreSQL8.4 vs Firebird2.5
@WindowsServer2008 &Linux CentOS5.3
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会33
Copyright(c) 2009 Firebird 日本ユーザー会
PostgreSQL 8.4 vs Firebird 2.5CS
34
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/202334
Copyright(c) 2009 Firebird 日本ユーザー会
PostgreSQL 8.4 vs Firebird 2.5CS
35
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/202335
Linux での Firebird が遅~~い!!
ファイルシステムが悪いんじゃないか?
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会3636
@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 で検証
37
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/202337
Ext3 XFS
Copyright(c) 2009 Firebird 日本ユーザー会
Linux+XFSだと劇速! Firebird2.5SC
38
調子に乗って 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/202338
XFS
Copyright(c) 2009 Firebird 日本ユーザー会
Linux+XFS で MySQL は
39
MySQL5.1.40 も 500 クライアントまでテスト
@Linux04/10/202339
10 50 100 5000
50
100
150
200 155.346666666667
117.3575.3566666666667
93.7666666666667
TPS
TPS
XFS
Firebird
Copyright(c) 2009 Firebird 日本ユーザー会
Linux+XFS で PostgreSQL は
40
PostgreSQL8.4.1 も 500 クライアントまでテスト
@Linux04/10/202340
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 日本ユーザー会41 04/10/202341
Copyright(c) 2009 Firebird 日本ユーザー会
余談 LostUpdate
42
並行するトランザクションで、後から開始したトランザクションが先行するトランザクションのデータを上書きしてしまう現象
Lost Update は、 MySQL の Falcon を除いて、他の RDBMS では検出することが出来ない。
MySQL の新ストレージエンジン Falcon徹底リサーチ
5 トランザクション制御 - MVCC と排他制御 松信嘉範 2007/03/03
http://journal.mycom.co.jp/special/2007/falcon/004.html
Falcon storage engine in depth
http://dev.mysql.com/tech-resources/articles/falcon-in-depth.html
04/10/202342
MySQL にある thread_stackFirebird のスレッドモデルでは、 MySQL のよう
にスレッドのスタックサイズを変更出来ない。Windwos の既定値は 1MB とでかい。このサイズは OS によって結構違う。
Windows 1MBCentOS 16KBAIX32bit 96KBFreeBSD 4KBMacOSX 8KB
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会43
thread のスタックサイズを変更Firebird のソース中、 ThreadStart.cpp にこの辺
のことは書いてある。 Windows 用の_beginthreadex() API の第 2 パラメータを変更してベンチマークを取ってみた。
04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会44
1MB コネクト
192KB コネクト
1MB TPS
192KB TPS
0 20 40 60 80 100120140160
100
100.3541912632
82
135.7
137
実行時間
実行時間
Copyright(c) 2009 Firebird 日本ユーザー会45 04/10/202345
Firebird の本が出ました!
翔泳社刊Firebird徹底入門
Presented by Tomneko
Special thanks to Q-tan