JdbcrunnerでSnowflakeに負荷テスト

概要

JdbcrunnerでSnowflakeに負荷を掛けてみる手順です。

インストール

JdbcrunnerをDownloadして適当なディレクトリに配置(今回は/opt下に配置)します。

$ ls /opt/
jdbcrunner-1.3

Snowflakejdbc-driverをDownloadし、jdbcrunner-1.3/libjdbc下に配置します。

$ ls /opt/jdbcrunner-1.3/libjdbc
snowflake-jdbc-3.12.2.jar

スクリプト準備

Snowflake内にTPC-Hのデータセットがあるので、クエリを投げるスクリプトを記述します(参考)。

$ vim ./scripts/sf_tpc-h.js
// JdbcRunner settings -----------------------------------------------

// Snowflake(Database/Schema/Wherehouseを指定)
var jdbcUrl = "jdbc:snowflake://xxxxxxx.us-east-1.snowflakecomputing.com/?db=snowflake_sample_data&schema=tpch_sf1&warehouse=compute_wh";

// User/Password指定
var jdbcUser = "hoge";
var jdbcPass = "hogehoge";

// 測定前のアイドルリング秒数
var warmupTime = 10;
// 測定時間秒数
var measurementTime = 60;
// 起動エージェント数
var nAgents = 4;

// Application settings ----------------------------------------------

// JdbcRunner functions ----------------------------------------------

function init() {
    // リザルトキャッシュをOffにする(Onにして計測したい場合はコメントアウト)
    query("ALTER SESSION SET USE_CACHED_RESULT=FALSE");
}

function run() {
    // https://docs.snowflake.com/ja/user-guide/sample-data-tpch.html#functional-query-definition
        query("select \
       l_returnflag, \
       l_linestatus, \
       sum(l_quantity) as sum_qty, \
       sum(l_extendedprice) as sum_base_price, \
       sum(l_extendedprice * (1-l_discount)) as sum_disc_price, \
       sum(l_extendedprice * (1-l_discount) * (1+l_tax)) as sum_charge, \
       avg(l_quantity) as avg_qty, \
       avg(l_extendedprice) as avg_price, \
       avg(l_discount) as avg_disc, \
       count(*) as count_order \
 from \
       lineitem \
 where \
       l_shipdate <= dateadd(day, -90, to_date('1998-12-01')) \
 group by \
       l_returnflag, \
       l_linestatus \
 order by \
       l_returnflag, \
       l_linestatus \
        ");
}

function fin() {
}

実行

$ cd /opt/jdbcrunner-1.3.jar
$ export CLASSPATH=jdbcrunner-1.3.jar:/opt/jdbcrunner-1.3/libjdbc/snowflake-jdbc-3.12.2.jar
$ java JR ./scripts/sf_tpc-h.js

その他

  • TPC-Hは本来は22種類のクエリを実行するのですが、サンプルなので1クエリのみ記載しています。

  • snowflake_sample_dataにレコード数が違うデータセットが複数存在するので、エージェント数やデータ件数を変えて色々試してください。

  • Jdbcrunnerは名前の通りJDBCで接続さえ出来れば大変手軽にベンチーマークを行えるツールで、ドキュメントやサンプルスクリプトも大変分かりやすいです。 作者のSH2さんに感謝と敬意を申し上げる次第です。上記手順でDriverを変えればRedshiftも繋がりました。