firebird2.5 がやってきた!

45
Firebird 日日日日日日日 日日日日日日 Firebird2.5 日日日日日日MySQL PostgreSQL 日日日日日日日日日日日OSC2 009Fukuoka 日

Upload: tsutomu-hayashi

Post on 17-Dec-2014

2.389 views

Category:

Technology


0 download

DESCRIPTION

OSC2009Fukuokaでお話した際のスライドです。 Firebird2.5で新たに開発されたSuperClassicモードで、パフォーマンスがどれだけ改善されたのかを、MySQLやPostgreSQLとの比較を通じてお話ししました。

TRANSCRIPT

Page 1: Firebird2.5 がやってきた!

Firebird日本ユーザー会 はやしつとむ

Firebird2.5 がやってきた!~ MySQL 、 PostgreSQL とのパフォーマンス比

較~

OSC2009Fukuoka 版

Page 2: Firebird2.5 がやってきた!

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

Page 3: Firebird2.5 がやってきた!

Firebird を作ったのは?

Copyright(c) 2009 Firebird 日本ユーザー会

生みの親 Jim Starkey ロシアの天才 Dmitry Yemanov

世界中の開発者とユーザーの皆さん

04/10/20233

Page 4: Firebird2.5 がやってきた!

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

Page 5: Firebird2.5 がやってきた!

Firebird World Wide

Copyright(c) 2009 Firebird 日本ユーザー会

Firebird Developer Day   @Brazil 2009-07480 人も集まった!

Firebird World Conferrence  @italy 2008-11夜中まで飲んで討論

04/10/20235

Page 6: Firebird2.5 がやってきた!

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

Page 7: Firebird2.5 がやってきた!

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

Page 8: Firebird2.5 がやってきた!

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

Page 9: Firebird2.5 がやってきた!

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

Page 10: Firebird2.5 がやってきた!

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

Page 11: Firebird2.5 がやってきた!

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

Page 12: Firebird2.5 がやってきた!

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

Page 13: Firebird2.5 がやってきた!

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

Page 14: Firebird2.5 がやってきた!

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

Page 15: Firebird2.5 がやってきた!

TPC-B

Copyright(c) 2009 Firebird 日本ユーザー会

TPC とは、 Transaction Processing Performanc Counsil が定める標準ベンチマーク仕様

TPC-B は 1990 年制定、 95 年に非推奨となっている同種のトランザクションが多数並行するバッチ処理等を想定したテスト銀行の支店間取引をシュミレートしている

15 04/10/202315

Page 16: Firebird2.5 がやってきた!

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

Page 17: Firebird2.5 がやってきた!

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

Page 18: Firebird2.5 がやってきた!

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

Page 19: Firebird2.5 がやってきた!

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

Page 20: Firebird2.5 がやってきた!

Firebird2.1 vs Firebird2.5

@WindowsServer2008

04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会20

Page 21: Firebird2.5 がやってきた!

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

Page 22: Firebird2.5 がやってきた!

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

Page 23: Firebird2.5 がやってきた!

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

Page 24: Firebird2.5 がやってきた!

Firebird2.1 vs Firebird2.5

@Linux CentOS5.3

04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会24

Page 25: Firebird2.5 がやってきた!

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

Page 26: Firebird2.5 がやってきた!

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

Page 27: Firebird2.5 がやってきた!

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

Page 28: Firebird2.5 がやってきた!

MySQL5.1.40 vs Firebird2.5

@WindowsServer2008 &Linux CentOS5.3

04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会28

with InnoDB

Page 29: Firebird2.5 がやってきた!

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

Page 30: Firebird2.5 がやってきた!

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

Page 31: Firebird2.5 がやってきた!

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

Page 32: Firebird2.5 がやってきた!

PostgreSQL8.4 vs Firebird2.5

@WindowsServer2008 &Linux CentOS5.3

04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会32

Page 33: Firebird2.5 がやってきた!

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

Page 34: Firebird2.5 がやってきた!

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

Page 35: Firebird2.5 がやってきた!

Linux での Firebird が遅~~い!!

ファイルシステムが悪いんじゃないか?

04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会3535

@Linux

Page 36: Firebird2.5 がやってきた!

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

Page 37: Firebird2.5 がやってきた!

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

Page 38: Firebird2.5 がやってきた!

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

Page 39: Firebird2.5 がやってきた!

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

Page 40: Firebird2.5 がやってきた!

まとめ ベンチマークはあくまで目安なので、実際の運

用環境を想定して、データベースを選択しよう。

  Firebird2.5 は、他の DB を比較しても遜色のない性能を発揮出来そう。

  500 クライアント以上の高負荷環境でも通用するぞ~!

Copyright(c) 2009 Firebird 日本ユーザー会40 04/10/202340

Page 41: Firebird2.5 がやってきた!

Copyright(c) 2009 Firebird 日本ユーザー会

余談  LostUpdate

41

並行するトランザクションで、後から開始したトランザクションが先行するトランザクションのデータを上書きしてしまう現象

Lost Update は、 MySQL の Falcon を除いて、他の RDBMS では検出することが出来ない。

04/10/202341

Page 42: Firebird2.5 がやってきた!

MySQL にある thread_stackFirebird のスレッドモデルでは、 MySQL のよう

にスレッドのスタックサイズを変更出来ない。Windwos の既定値は 1MB とでかい。このサイズは OS によって結構違う。

Windows 1MBCentOS 16KBAIX32bit 96KBFreeBSD 4KBMacOSX 8KB

04/10/2023Copyright(c) 2009 Firebird 日本ユーザー会42

Page 43: Firebird2.5 がやってきた!

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

実行時間

実行時間

Page 44: Firebird2.5 がやってきた!

Copyright(c) 2009 Firebird 日本ユーザー会44 04/10/202344

Firebird の本が出ました!

翔泳社刊Firebird徹底入門

Page 45: Firebird2.5 がやってきた!

Presented by Tomneko

Special thanks to Q-tan