Google、ORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応

2021年2月3日

SQL文を直接書かなくとも、自動的にSQL文を生成、実行してくれるORM(Object-Relational Mapper)は、プログラミングを容易にしてくれる技術としてRailsやHibernate、Springなどさまざまなフレームワークなどで活用されています。

一方で、ORMが生成するSQL文はときに複雑に、あるいは非効率なものとなり、データベース処理の遅さにつながることもあります。

このとき、SQL文の生成と実行を明示的にコードとして記述する必要がないというORMの特徴が、なぜデータベース処理が遅くなったのか、どのようなSQL文が生成され、そのどこに原因があるのか、といった調査を難しくている面があります。

そうした課題を解決するためにGoogleがオープンソースとして公開したのが「sqlcommenter」です(発表したブログ「Introducing Sqlcommenter: An open source ORM auto-instrumentation library」)。

fig

sqlcommenterはORMが生成するSQL文にコメントを追加することで、データベース処理が遅くなった時などの切り分けをしやすくするというもの。以下はsqlcommenterのWebサイトからの引用です。

sqlcommenter is a suite of middlewares/plugins that enable your ORMs to augment SQL statements before execution, with comments containing information about the code that caused its execution. This helps in easily correlating slow performance with source code and giving insights into backend database performance.

sqlcommenterはORMが生成する実行前のSQL文にコメントを補完するミドルウェア/プラグインです。コメントにはその実行されるSQL文生成の元になったコードに関する情報を含んでいます。これによりデータベースの性能低下となったコードの調査が容易になり、バックエンドデータベースの性能に関する洞察が得やすくなります。

sqlcommenterが対応するプログラミング言語は下記。

  • Java
  • Python
  • Node.js/JavaScript
  • Ruby

対応するフレームワークは下記。

  • Django
  • Knex.js
  • Psycopg2
  • Sequelize.js
  • SQLAlchemy
  • Hibernate
  • Express
  • Spring
  • Flask
  • Rails

対応するデータベースは下記。

  • PostgreSQL
  • MySQL
  • MariaDB
  • SQLite
  • Google Cloud SQL

sqlcommenterを設定やソースコードの一部を変更して組み込むことで、データベースのログにコメントが含まれることで遅いSQL文がどのコードから生成されたかを割り出すことや、OpenCensus/OpenTelemetryを用いてトレースする場合にもコメント情報を得ることで、問題のコードを発見することを支援することができるようになります。

このエントリーをはてなブックマークに追加
follow us in feedly




カテゴリ

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed


最新記事10本