Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Firebird2.5がやってきた!~MySQL、PostgreSQLとのパフォーマンス比較~<br />Firebird日本ユーザー会 はやしつとむ<br />OSC2009Fukuoka版<br />
2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />1<br />そもそもFirebirdとは<br />Firebird<br />2.0<br />Firebird<br />2.1<...
Firebirdを作ったのは?<br />Copyright(c) 2009 Firebird日本ユーザー会<br />生みの親 Jim Starkey<br />ロシアの天才 Dmitry Yemanov<br />世界中の開発者とユーザーの...
2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />3<br />Firebirdの市場シェア<br />EDC,2005,OpenSource RDBMS調査結果<br />ワールドワイ...
Firebird World Wide<br />Copyright(c) 2009 Firebird日本ユーザー会<br />Firebird World Conferrence @italy2008-11<br />夜中まで飲んで討論<br...
Firebird 2.5 beta2<br />Copyright(c) 2009 Firebird日本ユーザー会<br />FB2.5の主要な目標<br /><ul><li>新しいスレッドモデルを実装することSupre Classic
SQLレベルの新機能は最低限(といいつつ結構ある)
CREATE/ALTER/DROP USER 文の追加
ALTER VIEW and CREATE OR ALTER VIEW文の追加
PSQL でのAUTONOMOUS  TRANSACTION
EXECUTE STATEMENT での外部データベース接続
その他
2.5Alpha1の時のリリースノートが248kbしかなかったのに、2.5Beta1で500kb、2.5Beta2で573kbとどんどん増えている・・・</li></ul>5<br />2009/12/8<br />5<br />
Firebirdのアーキテクチャ<br />Firebirdには、以下の3つのエンジンアーキテクチャが存在する。<br />MySQL<br />PostgreSQL<br />New FB2.5<br />Copyright(c) 2009 ...
Super Server<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client...
Classic Server<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Clie...
Super Classic<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Clien...
Firebird 2.5 beta2<br />Copyright(c) 2009 Firebird日本ユーザー会<br />その他のSQL言語の機能追加<br /><ul><li>SIMILAR TO正規表現のサポート(1BYTE系のみ)
ALTER COLUMNが計算項目で可能に
VIEWのFROM句に選択型ストアドプロシージャを指定可能に
LIST()関数で区切り文字の指定が拡張された</li></ul>Data-handlingの機能拡張<br /><ul><li>新しい組み込み関数:UUID CHAR(16) OCTETS stringsをRFC4122-compliant ...
32-bitと64-bit integersをhexadecimal での文字列型数値やX-prefixedされた文字列でのバイナリ表現への変換</li></ul>10<br />2009/12/8<br />10<br />
Firebird2.5 beta2<br />Copyright(c) 2009 Firebird日本ユーザー会<br />管理機能の強化<br /><ul><li>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の新設</li></ul>APIの追加<br /><ul><li>SQL文の実行時に、SQL-2003標準の5文字のSQLSTATE コードを返す
isc_dsql_free_statement APIで、新たにDSQL_unprepare定数を使用出来るようになった</li></ul>11<br />2009/12/8<br />11<br />
Firebird2.5 beta2<br />Copyright(c) 2009 Firebird日本ユーザー会<br />国際化関係の機能追加<br /><ul><li>CREATE DATABASE文でデフォルトのコレーションを指定出来るよ...
UNICODE_FSSで不正なコードが許されなくなった。UTF8と同様の対応。
GBAK のリストアスイッチにFIX_FSS_DATA and FIX_FSS_METADATAが追加され、上記の対応をリストア時に取ることが出来るようになった。
Unicodeにアクセント付のCOLLATEが追加、UNICODE_CI_AI
ALTER CHARACTER SET 文を追加キャラクタセットのデフォルトコレーションを変更出来るようになった
SJISとEUCJで厳格なチェックが行われるようになった。チェックルーチンは元々あったのをActiveにした。</li></ul>12<br />2009/12/8<br />12<br />
DBBench <br />Copyright(c) 2009 Firebird日本ユーザー会<br />PostgreSQLのpgbenchをFirebird/MySQLへ移植<br /><ul><li>Delphi + dbExpressに...
dbExpressのドライバを切り替えれば他のDBへも応用可能
単一のコード/バイナリで、現状Firebird/MySQL/PostgreSQLをテスト出来る
GUIによる設定が可能
ものすごく手軽なデータベースベンチマーク
Firebirdのベンチマークは、この他にTPC-RやAS3APなどがあります。</li></ul>13<br />2009/12/8<br />13<br />
TPC-B<br />Copyright(c) 2009 Firebird日本ユーザー会<br />TPCとは、Transaction Processing Performanc Counsilが定める標準ベンチマーク仕様<br /><ul><...
同種のトランザクションが多数並行するバッチ処理等を想定したテスト
銀行の支店間取引をシュミレートしている</li></ul>14<br />2009/12/8<br />14<br />
Copyright(c) 2009 Firebird日本ユーザー会<br />TPC-B<br />対象のテーブルは4つ<br /><ul><li>create table branches(bid int not null,bbalance ...
Upcoming SlideShare
Loading in …5
×

Firebird2.5 がやってきた!

3,546 views

Published on

OSC2009Fukuokaでお話した際のスライドです。

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

Published in: Technology
  • Be the first to comment

Firebird2.5 がやってきた!

  1. 1. Firebird2.5がやってきた!~MySQL、PostgreSQLとのパフォーマンス比較~<br />Firebird日本ユーザー会 はやしつとむ<br />OSC2009Fukuoka版<br />
  2. 2. 2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />1<br />そもそもFirebirdとは<br />Firebird<br />2.0<br />Firebird<br />2.1<br />Firebird<br />2.5<br />【無償】<br />【機能的にほぼ同一】<br />Firebird<br />1.5<br />InterBase<br />6.0<br />OpenSource版<br />Firebird<br />1.0<br />InterBase<br />4.x Linux<br />FreeBSD版<br />Now β<br />InterBase<br />4.x商用版<br />InterBase<br />5.x<br />InterBase<br />6.0<br />InterBase<br />6.5<br />InterBase<br />7.0,7.1<br />【有償】<br />InterBase<br />2007<br />InterBase<br />2009<br />InterBase<br />7.5<br />【日本未発売】<br />■起源はBorland社の商用RDBMS interBase<br />■一時オープン化されたソースから分岐<br />■現在はそれぞれ別の進化をとげる<br />1<br />
  3. 3. Firebirdを作ったのは?<br />Copyright(c) 2009 Firebird日本ユーザー会<br />生みの親 Jim Starkey<br />ロシアの天才 Dmitry Yemanov<br />世界中の開発者とユーザーの皆さん<br />2009/12/8<br />2<br />
  4. 4. 2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />3<br />Firebirdの市場シェア<br />EDC,2005,OpenSource RDBMS調査結果<br />ワールドワイドでは<br />MySQL<br />vs<br />Firebird<br />MとFとPで<br />「オープンソース<br />データベース<br />御三家」<br />と呼びましょう!<br />情報提供:Evans Data Corporation<br />http://www.evansdata.com/n2/pr/releases/EDCDB05_01.shtml<br />3<br />
  5. 5. Firebird World Wide<br />Copyright(c) 2009 Firebird日本ユーザー会<br />Firebird World Conferrence @italy2008-11<br />夜中まで飲んで討論<br />Firebird Developer Day @Brazil2009-07<br />480人も集まった!<br />2009/12/8<br />4<br />
  6. 6. Firebird 2.5 beta2<br />Copyright(c) 2009 Firebird日本ユーザー会<br />FB2.5の主要な目標<br /><ul><li>新しいスレッドモデルを実装することSupre Classic
  7. 7. SQLレベルの新機能は最低限(といいつつ結構ある)
  8. 8. CREATE/ALTER/DROP USER 文の追加
  9. 9. ALTER VIEW and CREATE OR ALTER VIEW文の追加
  10. 10. PSQL でのAUTONOMOUS TRANSACTION
  11. 11. EXECUTE STATEMENT での外部データベース接続
  12. 12. その他
  13. 13. 2.5Alpha1の時のリリースノートが248kbしかなかったのに、2.5Beta1で500kb、2.5Beta2で573kbとどんどん増えている・・・</li></ul>5<br />2009/12/8<br />5<br />
  14. 14. Firebirdのアーキテクチャ<br />Firebirdには、以下の3つのエンジンアーキテクチャが存在する。<br />MySQL<br />PostgreSQL<br />New FB2.5<br />Copyright(c) 2009 Firebird日本ユーザー会<br />6<br />2009/12/8<br />6<br />
  15. 15. Super Server<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Clientn<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread n<br />1Process only <br />have a cache<br />perDatabase<br />Process 1<br />Database A<br />Database B<br />Security2.fdb<br />Copyright(c) 2009 Firebird日本ユーザー会<br />7<br />2009/12/8<br />7<br />
  16. 16. Classic Server<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Clientn<br />Process 1<br />Process 1<br />Process 1<br />Process 1<br />Lock Manager<br />Process 1<br />Process 1<br />Process 1<br />Process 1<br />Process 1<br />Process n<br />Database A<br />Database B<br />Each Processes<br /> have own cache<br />Security2.fdb<br />Copyright(c) 2009 Firebird日本ユーザー会<br />8<br />2009/12/8<br />8<br />
  17. 17. Super Classic<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Client 1<br />Clientn<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread 1<br />Thread n<br />Each threads <br />Have own cache<br />Process 1<br />Database A<br />Database B<br />Security2.fdb<br />Copyright(c) 2009 Firebird日本ユーザー会<br />9<br />2009/12/8<br />9<br />
  18. 18. Firebird 2.5 beta2<br />Copyright(c) 2009 Firebird日本ユーザー会<br />その他のSQL言語の機能追加<br /><ul><li>SIMILAR TO正規表現のサポート(1BYTE系のみ)
  19. 19. ALTER COLUMNが計算項目で可能に
  20. 20. VIEWのFROM句に選択型ストアドプロシージャを指定可能に
  21. 21. LIST()関数で区切り文字の指定が拡張された</li></ul>Data-handlingの機能拡張<br /><ul><li>新しい組み込み関数:UUID CHAR(16) OCTETS stringsをRFC4122-compliant formatに変換
  22. 22. 32-bitと64-bit integersをhexadecimal での文字列型数値やX-prefixedされた文字列でのバイナリ表現への変換</li></ul>10<br />2009/12/8<br />10<br />
  23. 23. Firebird2.5 beta2<br />Copyright(c) 2009 Firebird日本ユーザー会<br />管理機能の強化<br /><ul><li>CREATE/ALTER/DROP USER 文の追加
  24. 24. 新system role RDB$ADMINがODS 11.2で追加され、SYSDBA権限をデータベース毎に他のユーザーに移譲出来るようになった
  25. 25. モニタリングテーブルの拡張
  26. 26. Firebird2.1.1では、SYSDBA以外の一般ユーザーは自分のコネクションに関する情報しか見ることが出来なかった。
  27. 27. Firebird2.5+Firebird2.1.2以降では、「同じ接続ユーザー名」のコネクションに関する情報も見ることが出来る。
  28. 28. MON$MEMORY_USAGE、MON$CONTEXT_VARIABLESの新設</li></ul>APIの追加<br /><ul><li>SQL文の実行時に、SQL-2003標準の5文字のSQLSTATE コードを返す
  29. 29. isc_dsql_free_statement APIで、新たにDSQL_unprepare定数を使用出来るようになった</li></ul>11<br />2009/12/8<br />11<br />
  30. 30. Firebird2.5 beta2<br />Copyright(c) 2009 Firebird日本ユーザー会<br />国際化関係の機能追加<br /><ul><li>CREATE DATABASE文でデフォルトのコレーションを指定出来るようになった
  31. 31. UNICODE_FSSで不正なコードが許されなくなった。UTF8と同様の対応。
  32. 32. GBAK のリストアスイッチにFIX_FSS_DATA and FIX_FSS_METADATAが追加され、上記の対応をリストア時に取ることが出来るようになった。
  33. 33. Unicodeにアクセント付のCOLLATEが追加、UNICODE_CI_AI
  34. 34. ALTER CHARACTER SET 文を追加キャラクタセットのデフォルトコレーションを変更出来るようになった
  35. 35. SJISとEUCJで厳格なチェックが行われるようになった。チェックルーチンは元々あったのをActiveにした。</li></ul>12<br />2009/12/8<br />12<br />
  36. 36. DBBench <br />Copyright(c) 2009 Firebird日本ユーザー会<br />PostgreSQLのpgbenchをFirebird/MySQLへ移植<br /><ul><li>Delphi + dbExpressによるマルチスレッド実装
  37. 37. dbExpressのドライバを切り替えれば他のDBへも応用可能
  38. 38. 単一のコード/バイナリで、現状Firebird/MySQL/PostgreSQLをテスト出来る
  39. 39. GUIによる設定が可能
  40. 40. ものすごく手軽なデータベースベンチマーク
  41. 41. Firebirdのベンチマークは、この他にTPC-RやAS3APなどがあります。</li></ul>13<br />2009/12/8<br />13<br />
  42. 42. TPC-B<br />Copyright(c) 2009 Firebird日本ユーザー会<br />TPCとは、Transaction Processing Performanc Counsilが定める標準ベンチマーク仕様<br /><ul><li>TPC-Bは1990年制定、95年に非推奨となっている
  43. 43. 同種のトランザクションが多数並行するバッチ処理等を想定したテスト
  44. 44. 銀行の支店間取引をシュミレートしている</li></ul>14<br />2009/12/8<br />14<br />
  45. 45. Copyright(c) 2009 Firebird日本ユーザー会<br />TPC-B<br />対象のテーブルは4つ<br /><ul><li>create table branches(bid int not null,bbalance int,filler char(88));
  46. 46. create table tellers(tid int not null,bid int,tbalance int,filler char(84));
  47. 47. create table accounts(aid int not null,bid int,abalance int,filler char(84));
  48. 48. create table history(tid int,bid int,aid int,delta int,mtime timestamp,filler char(22))</li></ul>2009/12/8<br />15<br />15<br />
  49. 49. Copyright(c) 2009 Firebird日本ユーザー会<br />TPC-B<br />処理内容は以下の流れ<br /><ul><li>update accounts set abalance = abalance + :delta where aid = :aid;
  50. 50. select abalance from accounts where aid = :aid;
  51. 51. update tellers set tbalance = tbalance + :delta where tid = :tid;
  52. 52. update branches set bbalance = bbalance + :delta where bid = :bid;
  53. 53. insert into history(tid,bid,aid,delta) values(:tid,:bid,:aid,:delta);</li></ul>16<br />2009/12/8<br />16<br />
  54. 54. Copyright(c) 2009 Firebird日本ユーザー会<br />ScalingFactor<br />Scalingfactoristestscale<br /><ul><li>Scalingfactoraffects
  55. 55. Branchcountequalsscalingfactor
  56. 56. Tellercountisscalingfactor * 10
  57. 57. Accountcountisscalingfactor * 100,000
  58. 58. SoIusescalingfactor100
  59. 59. Branchis100,Telleris1000,Accountsis10,000,000
  60. 60. Firebirddatabasealmost600MB,MySQLisalmost1.2GB</li></ul>17<br />2009/12/8<br />17<br />
  61. 61. Copyright(c) 2009 Firebird日本ユーザー会<br />ベンチーク環境<br />じゃんけんに買って手に入れて下さいね~<br />AMD AthlonTM 1640B(2.7GHz)<br />AMD PhenomTM 9350e(2.0GHz)<br />HP製 ML115G5<br />ECCは付いてるけど<br />512MBDDR2-6400<br />HDDは標準の160GBのまま・・・<br />Non-ECC<br />4GBDDR2-6400<br />18<br />2009/12/8<br />18<br />
  62. 62. Firebird2.1vsFirebird2.5<br />@WindowsServer2008<br />2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />19<br />
  63. 63. Copyright(c) 2009 Firebird日本ユーザー会<br />Firebird 2.1SS vs Firebird 2.5SS<br />20<br />Firebird2.1とFirebird2.5の結果を比較<br />@Windows<br />2009/12/8<br />20<br />
  64. 64. Copyright(c) 2009 Firebird日本ユーザー会<br />Firebird 2.1CS vs Firebird 2.5CS<br />21<br />Firebird2.1とFirebird2.5の結果を比較<br />@Windows<br />2009/12/8<br />21<br />
  65. 65. Copyright(c) 2009 Firebird日本ユーザー会<br />Firebird 2.1SS vs Firebird 2.5SC<br />22<br />Firebird2.1とFirebird2.5の結果を比較<br />@Windows<br />2009/12/8<br />22<br />
  66. 66. Firebird2.1vsFirebird2.5<br />@LinuxCentOS5.3<br />2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />23<br />
  67. 67. Copyright(c) 2009 Firebird日本ユーザー会<br />Firebird 2.1SS vs Firebird 2.5SS<br />24<br />Firebird2.1とFirebird2.5の結果を比較<br />引き分け<br />@Linux<br />2009/12/8<br />24<br />
  68. 68. Copyright(c) 2009 Firebird日本ユーザー会<br />Firebird 2.1CS vs Firebird 2.5CS<br />25<br />Firebird2.1とFirebird2.5の結果を比較<br />@Linux<br />2009/12/8<br />25<br />
  69. 69. Copyright(c) 2009 Firebird日本ユーザー会<br />Firebird 2.1SS vs Firebird 2.5SC<br />26<br />Firebird2.1とFirebird2.5の結果を比較<br />@Linux<br />2009/12/8<br />26<br />
  70. 70. MySQL5.1.40vsFirebird2.5<br />@WindowsServer2008&<br />LinuxCentOS5.3<br />2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />27<br />with InnoDB<br />
  71. 71. Copyright(c) 2009 Firebird日本ユーザー会<br />MySQL5.1vsFirebird2.5SC<br />MySQL5.1.40とFirebird2.5の結果を比較<br />with InnoDB<br />@Windows<br />28<br />2009/12/8<br />28<br />
  72. 72. Copyright(c) 2009 Firebird日本ユーザー会<br />MySQL5.1vsFirebird2.5SC<br />MySQL5.1.40とFirebird2.5の結果を比較<br />with InnoDB<br />@Linux<br />29<br />2009/12/8<br />29<br />
  73. 73. Copyright(c) 2009 Firebird日本ユーザー会<br />MySQL5.1vsFirebird1.5SS<br />MySQL5.1.40とFirebird2.5の結果を比較<br />with InnoDB<br />引き分け<br />@Linux<br />30<br />2009/12/8<br />30<br />
  74. 74. PostgreSQL8.4vsFirebird2.5<br />@WindowsServer2008&<br />LinuxCentOS5.3<br />2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />31<br />
  75. 75. Copyright(c) 2009 Firebird日本ユーザー会<br />PostgreSQL8.4vsFirebird2.5CS<br />32<br />PostgreSQL8.4.1とFirebird2.5の結果を比較<br />@Windows<br />2009/12/8<br />32<br />
  76. 76. Copyright(c) 2009 Firebird日本ユーザー会<br />PostgreSQL8.4vsFirebird2.5CS<br />33<br />PostgreSQL8.4.1とFirebird2.5の結果を比較<br />@Linux<br />2009/12/8<br />33<br />
  77. 77. LinuxでのFirebirdが遅~~い!!<br />ファイルシステムが悪いんじゃないか?<br />2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />34<br />@Linux<br />34<br />
  78. 78. Copyright(c) 2009 Firebird日本ユーザー会<br />Firebird2.5SCで検証<br />Ext3とXFSでパフォーマンスを測定<br />Ext3<br />XFS<br />@Linux<br />35<br />2009/12/8<br />35<br />
  79. 79. Copyright(c) 2009 Firebird日本ユーザー会<br />Linux+XFSだと劇速! Firebird2.5SC<br />調子に乗って500クライアントもテスト!<br />XFS<br />@Linux<br />36<br />2009/12/8<br />36<br />
  80. 80. Copyright(c) 2009 Firebird日本ユーザー会<br />Linux+XFSでMySQLは<br />MySQL5.1.40も500クライアントまでテスト<br />XFS<br />Firebird<br />@Linux<br />37<br />2009/12/8<br />37<br />
  81. 81. Copyright(c) 2009 Firebird日本ユーザー会<br />Linux+XFSでPostgreSQLは<br />PostgreSQL8.4.1も500クライアントまでテスト<br />XFS<br />Firebird<br />@Linux<br />38<br />2009/12/8<br />38<br />
  82. 82. まとめ<br /> ベンチマークはあくまで目安なので、実際の運用環境を想定して、データベースを選択しよう。<br /> Firebird2.5は、他のDBを比較しても遜色のない性能を発揮出来そう。<br /> 500クライアント以上の高負荷環境でも通用するぞ~!<br />Copyright(c) 2009 Firebird日本ユーザー会<br />39<br />2009/12/8<br />39<br />
  83. 83. Copyright(c) 2009 Firebird日本ユーザー会<br />余談 LostUpdate<br />40<br />並行するトランザクションで、後から開始したトランザクションが先行するトランザクションのデータを上書きしてしまう現象<br />LostUpdateは、MySQLのFalconを除いて、他のRDBMSでは検出することが出来ない。<br />2009/12/8<br />40<br />
  84. 84. MySQLにあるthread_stack<br />Firebirdのスレッドモデルでは、MySQLのようにスレッドのスタックサイズを変更出来ない。Windwosの既定値は1MBとでかい。このサイズはOSによって結構違う。<br /><ul><li>Windows 1MB
  85. 85. CentOS 16KB
  86. 86. AIX32bit 96KB
  87. 87. FreeBSD 4KB
  88. 88. MacOSX 8KB</li></ul>2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />41<br />
  89. 89. threadのスタックサイズを変更<br />Firebirdのソース中、ThreadStart.cppにこの辺のことは書いてある。Windows用の_beginthreadex() API の第2パラメータを変更してベンチマークを取ってみた。<br />2009/12/8<br />Copyright(c) 2009 Firebird日本ユーザー会<br />42<br />
  90. 90. Copyright(c) 2009 Firebird日本ユーザー会<br />43<br />2009/12/8<br />43<br />Firebirdの本が出ました!<br />翔泳社刊<br />Firebird徹底入門<br />
  91. 91. Presented by Tomneko<br />Special thanks to Q-tan<br />

×