TDSQL-C for MySQLのTXLカーネルは、コンパイル最適化による高性能バージョンをサポートしています。既存の互換性を維持し、カーネル内部の実装ロジックを変更することなく、動的コンパイラ最適化手法によってユーザーの入力パターンを考慮することで、汎用業務シナリオにおいてデータベースカーネルがより優れたパフォーマンスを発揮し、同時に消費電力の削減を実現します。このドキュメントではTDSQL-C for MySQLのコンパイル最適化高性能バージョンについて紹介します。
サポートバージョン
カーネルバージョン TDSQL-C for MySQL 5.7 2.1.11 以上。
カーネルバージョン TDSQL-C for MySQL 8.0 3.1.12 以上。
説明:
コンパイル最適化高性能バージョンは現在段階的リリース中です。早期体験を希望する場合は、上記のデータベースカーネルバージョンを満たした上で、チケットを提出して、利用申請を行ってください。 背景
現代のCPU内部実装がますます複雑化するにつれ、クラウドデータベースのデフォルトのコンパイル・設定・実行方法ではCPUの性能ポテンシャルを十分に発揮することが困難であり、大量のCPUサイクルがアイドル状態になっています。この現象はスケール効果の重なりにより、ハードウェアリソースの浪費を引き起こすだけでなく、膨大な電力消費の無駄も生じさせます。したがって、クラウドデータベースを最適化し、CPUの性能ポテンシャルを最大限に引き出し、CPUサイクルのアイドル状態を削減、ハードウェアリソースの利用率を向上させるとともに、電力消費の無駄を削減する必要があります。
TDSQL-C for MySQLは、データベースカーネルの業務ロジックコードを変更することなく、動的コンパイラ最適化手法を活用し、最小限のコストでカーネル性能の向上と消費電力の削減を完了しました。クラウドデータベースの典型的な/実際の業務シナリオにおける動作と性能消費データを収集することで、デフォルトのコンパイル方式が業務動作を認識しない問題を解決します。データベースの実行時動作特性を分析し、CPUマイクロアーキテクチャの特徴と組み合わせ、コンパイル最適化技術を利用して最適化後のバージョンがCPUマイクロアーキテクチャにより親和性を持ち、CPUの性能ポテンシャルを十分に発揮できるようにします。大量のシナリオテストを通じて、様々な条件下で最適化効果が劣化しないことを保証します。
以上の技術手段を通じて、このバージョンでは以下の最適化を実現しました:
1. データベースの実行行動データに基づくフィードバック最適化を実現し、関数インライン化/関数再配置/基本ライブラリ再配置の最適化能力を向上させることで、データベースのCPU ICache/ITLBミス率を大幅に低減し、性能を向上させます。
2. 「リンク時最適化技術」を通じてコンパイル最適化の視野を拡大し、単一ファイル・単一関数から複数ファイル/全バイナリファイル範囲に拡張することで、インライン最適化の余地を大幅に向上させ、命令数を削減できます。
3. 実践の中で効率的な検証と分析の方法を模索し、効果が理論限界に近づき、様々なシナリオで劣化しないことを保証します。
コンパイル最適化とは何ですか?
コンパイル最適化とは、コードのコンパイル時に、コードの最適化やコンパイルパラメータの調整を通じて、プログラムの実行効率と性能を向上させるプロセスです。
最適化原理
TDSQL-C for MySQLのコンパイル最適化高性能バージョンは、PGO(profile guided optimization)技術を活用して最適化を行います。PGO技術は、従来のコンパイラが最適化実行時に静的なコード情報のみに基づき、ユーザーの入力パターンを考慮しないためにコードを効果的に最適化できないという問題が解決できます。
PGO技術は主に以下の3つの段階に分けられます:
1. instrument:instrument段階では、まずアプリケーションに対して一度コンパイルします。このコンパイル時に、コンパイラはコードに命令を挿入し、次の段階でデータを収集できるようにします。これらの命令は3種類に分かれ、それぞれ、各関数が実行された回数、各分岐が実行された回数(例えば、if-elseシナリオ)、特定の変数の値(主にswitch-caseシナリオ用)を計測するために用いられます。
2. train:train段階では、ユーザーは最も一般的な入力を使用して、前段階でコンパイルして生成されたアプリケーションを実行する必要があります。前段階ですでにデータ収集の準備ができているため、train段階を経た後、そのアプリケーションの最も一般的な使用シナリオに対応するデータが収集されます。
3. optimization:optimization段階では、コンパイラは前段階で収集されたデータを活用して、アプリケーションを再コンパイルします。前段階のデータはユーザー入力の最も一般的なユーザーシナリオに基づいているため、最終的に最適化された結果はそのシナリオにおいてより良い最適化効果を発揮します。
以上の3つの段階の最適化を通じて、TDSQL-C for MySQLのコンパイル最適化高性能バージョンはユーザーのニーズにより適応し、アプリケーションのパフォーマンスと効率を向上させることができます。
性能テスト
コンパイル最適化高性能バージョンの性能テストデータについては、以下のドキュメントを参照してください。