なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

HammerDB 4.1がリリースされていた - リリースノートチェック

今回はリリースノートチェックだけ

4/23にHammerDB v4.1がリリースされていました。
マイナーバージョンアップということで、どこぞのデータベースのような大きな機能追加はないです。


リリースノートには、大きく6つの変更点が記載されています。

1.1. Nomenclature Change(命名法の変更)
1.2. Stored Procedure Refactoring and Performance(ストアドプロシージャのリファクタリングとパフォーマンス)
1.3. PostgreSQL TPROC-C Schema refactoring(PostgreSQLTPROC-Cスキーマリファクタリング)
1.4. Oracle and PostgreSQL TPROC-H Schema and Query updates(OraclePostgreSQLのTPROC-Hスキーマとクエリの更新)
1.5. Known Third-Party Driver Issues(既知のサードパーティドライバーの問題)
1.6. Linux Font Pre-Installation Requirements(Linuxフォントのインストール前の要件)

また、その他、細かいバグフィックスなど、リリースノートには記載されていない修正ももちろん含まれています。



このうち、
1.1. Nomenclature Change(命名法の変更)
1.2. Stored Procedure Refactoring and Performance(ストアドプロシージャのリファクタリングとパフォーマンス)
1.5. Known Third-Party Driver Issues(既知のサードパーティドライバーの問題)
1.6. Linux Font Pre-Installation Requirements(Linuxフォントのインストール前の要件)
は、v4.0と内容が同じです。


よって、違いのある、
1.3. PostgreSQL TPROC-C Schema refactoring(PostgreSQLTPROC-Cスキーマリファクタリング)
1.4. Oracle and PostgreSQL TPROC-H Schema and Query updates(OraclePostgreSQLのTPROC-Hスキーマとクエリの更新)
その他. 細かいバグフィックスなど
を中心に追いかけます。


なお、今回触れないですけど、
HammerDB v4.1 Extended Time Profiling – HammerDB Blog
HammerDB v4.1 CLI Transaction Counter and Count Logging – HammerDB Blog
といったテーマがHammerDB公式ブログに上がってますので、合わせて読んでおくことを推奨します。

変更点1.3.PostgreSQLTPROC-Cスキーマリファクタリング

大した分量じゃないので、全文引用します。

(英文)
From version 4.1 the PostgreSQL has been refactored changing the datatypes according to PostgreSQL community recommendations. Additional hash partitioning has been enabled for the orderline table that has been measured to reduce table bloat over repeated tests. Both changes have been measured to improve performance over the previous PostgreSQL schema by up to 3%.


Google翻訳
バージョン4.1から、PostgreSQLリファクタリングされ、PostgreSQLコミュニティの推奨事項に従ってデータ型が変更されました。繰り返されるテストでのテーブルの肥大化を減らすために、測定されたオーダーラインテーブルに対して追加のハッシュパーティショニングが有効になりました。両方の変更は、以前のPostgreSQLスキーマよりもパフォーマンスが最大3%向上するように測定されています。


※強調は筆者。

多分、GitHubのIssueにおけるコレのことだと思います。

Postgres datatype change from number to integer performance degragation · Issue #194 · TPC-Council/HammerDB · GitHub



「NUMERIC」を「INTEGER」にする、と。
確かに、PostgreSQLのドキュメントにも、桁や精度の要件が許すならNUMERICよりも他のデータ型のほうが速いって話が書いてありますしね。

8.1.2. 任意の精度を持つ数
numeric型は、非常に大きな桁数で数値を格納できます。 通貨金額やその他正確性が求められる数量を保存する時は特に、この型を推奨します。 numericの値での計算は、可能なところ、例えば、足し算、引算、掛け算では、正確な結果(訳注:10進の小数で誤差が生じない、ということ)になります。 とは言っても、numericの値に対する計算は整数型、もしくは次節で説明する浮動小数点データ型に比較し非常に遅くなります。
8.1. 数値データ型

変更点1.4.OraclePostgreSQLのTPROC-Hスキーマとクエリの更新

こちらも、大した分量じゃないので、全文引用します。

(英文)
For PostgreSQL additional indexes have been added to foreign keys for the TPROC-H workload. For Oracle a missing limit clause was added to some TPROC-H queries. These changes improve performance of TPROC-H workloads for PostgreSQL and Oracle compared to v4.0 and earlier.


Google翻訳
PostgreSQLの場合、TPROC-Hワークロードの外部キーに追加のインデックスが追加されました。 Oracleの場合、欠落している制限句が一部のTPROC-Hクエリに追加されました。これらの変更により、v4.0以前と比較してPostgreSQLおよびOracleのTPROC-Hワークロードのパフォーマンスが向上します。

以前の記事で触れた「PostgreSQLTPC-Hで、FK参照先にインデックスがついてないので、Query 20が終わらなくなる。Oracleもインデックスついてないけど、一応返ってくる。」っていう話の改善です。
HammerDBをCLIで使うなど(8):PostgreSQLにTPC-Hを実行してみる - なからなLife
HammerDBをCLIで使うなど(9):OracleにTPC-Hを実行してみる - なからなLife

Oracleの欠落している制限句、の件は、この件ですね。
Add limit clause to query10 for TPC-H Oracle · Issue #172 · TPC-Council/HammerDB · GitHub


その他

https://github.com/TPC-Council/HammerDB/compare/v4.0...v4.1
を見ると、38のCommitが入っているようです。

以前の記事で触れた、「MySQL向けのコネクションプールがバグってたよ!」あたりも改善されてます。
HammerDB 4.0がリリースされていた - 複数インスタンスへの接続・負荷試験 その1 - なからなLife

その他、OracleのAWR スナップショット連動まわりに不具合が合ったところも修正しているようですね。



なお、フライング情報ですが、v4.1の次に向けてすでにCommitされているものとして、

  • 上記以外だと、MariaDB向けのワークロードがMySQL用から独立
  • 「コネクションプール設定用のファイルテンプレート、MySQL用なのに5432とか入ってるよ」の修正
  • TPC-CとTPC-Hのミックスワークロード
    • 記念すべき「Issue #1」で上がっていた要望「TPC-E対応」が「low priority」となった代わりに、ミックスワークロードのプルリクがVerifyされてる

あたりが見えてます。

まとめ

HammerDB v4.0からv4.1での改善は、以下3点です。

  • PostgreSQL用とOracle用の性能改善。ストアドやスキーマ定義の修正。
  • HammerDB v4.0でMySQL用のクラスタ構成向けTPC-Cワークロードに含まれていたバグは予定通り修正されてた。
  • 次のバージョンで、TPC-C/TPC-Hのミックスワークロード、mariaDB対応(MySQLからの独立)が入ってきそう。

あとで他に気づいた話があったら追記します。リリースノートだけ読んでてもわからない機能追加があったりするので。


インデックス足りなかった件がこのタイミングで改修されてきたことをを見ると、気づいた時点でちゃんとGitHubにIssueなりPull Requestなりを上げてればもっと早い時期に対応されてたかも、という後悔がありますね。

プルリクできるレベルのスキルがなくても、見つけたバグの報告も大事な貢献だってHammerDBのブログでも言ってました。
Interacting with Open Source for HammerDB Code and Documentation – HammerDB Blog


バグレポするにも英語でのIssue登録が必要ですが、英語直訳のような日本語文をベースとして書きあげて、あとはGoogle翻訳とDeepLに全力で頼りましょう。

あとは、英語でも日本語でもない共通言語「再現手順(コマンド)・実行ログ」をしっかり提示することですね。OSSに限らずバグレポでいちばん大事なのはコレ!