PowerPoint Presentation

Similar documents
Amazon Redshift テーブル設計詳細ガイド –分散スタイルとソートキーの決定方法–

Presentation Title Here

サンプル:OSDL DBT-3によるPostgreSQLの性能評価(SATA HDD&SATA SSD編)

PostgreSQL SQL チューニング入門 ~ Explaining Explain より ~ 2012 年 11 月 30 日 株式会社アシスト 田中健一朗

OLAP も PostgreSQL で! Swarm64 の FPGA によるDB 高速化ソリューション「S64DA」のご紹介

AWSにおけるデータベース・サービスの活用

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

1,.,,,., RDBM, SQL. OSS,, SQL,,.

今さら聞けない!? Oracle入門 ~後編~

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

Microsoft PowerPoint pptx

TPC-H を用いた Azure SQL Data Warehouse の 性能検証

PowerPoint プレゼンテーション

: ORDER BY

OracleDBA(パフォーマンスチューニング(SQL編) - コピー

PostgreSQL 9.4 評価検証報告 SRA OSS, Inc. 日本支社高塚遙 :55 ~ 16:30 PostgreSQL 9.4 最新情報セミナー Copyright 2014 SRA OSS, Inc. Japan All rights reserved. 1

スライド 1

Microsoft PowerPoint - db03-5.ppt

,, create table drop table alter table

PGECons技術ドキュメントテンプレート Ver.3

PowerPoint プレゼンテーション

クエリの作成が楽になるUDF

Caché SQL に関するよくある質問

1 ex01.sql ex01.sql ; user_id from (select user_id ;) user_id * select select (3+4)*7, SIN(PI()/2) ; (1) select < > from < > ; :, * user_id user_name

2D/3D CAD データ管理導入手法実践セミナー Autodesk Vault 最新バージョン情報 Presenter Name 2013 年 4 月 2013 Autodesk

Oracle9i

Sequel のすすめ 私が SQL を嫌いな理由 とみたまさひろ RubyHiroba Sequel のすすめ - 私が SQL を嫌いな理由 Powered by Rabbit 2.0.7

Microsoft Word - sample_adv-programming.docx

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

プレポスト【問題】

PowerPoint Presentation

PostgreSQL 9.3パーティションの効果検証

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

n n n ( ) n Oracle 16 PostgreSQL 3 MySQL

スライド 1

自己紹介 長田悠吾 (Yugo Nagata) SRA OSS, Inc. 日本支社 PostgreSQL 技術支援 コンサルティング PostgreSQL インターナル講座講師 研究開発 Copyright 2018 SRA OSS, Inc. Japan All right

ソフト活用事例③自動Rawデータ管理システム

SQLite データベース IS04 組み込み 1

Oracle Database 10g Release 2を使用したデータベース・パフォーマンス

スライド 1

~~~~~~~~~~~~~~~~~~ wait Call CPU time 1, latch: library cache 7, latch: library cache lock 4, job scheduler co

関数サンプル1

ユーザ デバイス プロファイルの ファイル形式

防災マップ作成システムの開発業務基本設計書

早分かりS2Dao

AutoCAD のCitrix XenApp 対応

Insert your Title here

今さら聞けない!? Oracle入門 ~前編~


Hadoop LZO圧縮機能の検証

imt_817_tuning_11_1822.PDF

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行

APEX Spreadsheet ATP HOL JA - Read-Only

10年オンプレで運用したmixiをAWSに移行した10の理由

MaxGauge_診断分析プロセス

PowerPoint Presentation

関数サンプル2

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

橡ボーダーライン.PDF

Enterprise Cloud + 紹介資料

How to Use the PowerPoint Template

基本サンプル

Chapter

Transcription:

Amazon Redshift パフォーマンス チューニングアマゾンデータサービスジャパン株式会社 八木橋徹平 2014/07/18 Session TA-08 2014 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.

自己紹介 名前 八木橋徹平 ( やぎはしてっぺい ) 所属 アマゾンデータサービスジャパン株式会社技術統括本部エンタープライズ部ソリューションアーキテクト 好きな AWS サービス Amazon Redshift Amazon Kinesis AWS SDK(Java Node.js)

最新アップデート 無料利用枠 (2 か月間 ) dw2.large を 730 時間 *2 に相当する利用量 ( クラスタも可 ) アジアパシフィックで 3 年リザーブドインスタンスの 25% 以上値下げ スタートアップ企業からエンタープライズまで幅広くご採用 クックパッド様 良品計画様 すかいらーく様 ガリバー様 NTT DOCOMO 様基幹業務システムで採用をご検討

セッションの目的 アーキテクチャの理解を深めていただき ノード数の追加やインスタンスのスケールアップだけに頼らず (= コスト増なしに ) Redshift の効果的なチューニング手法を学んでいただく

アジェンダ Redshiftのアーキテクチャ テーブル設計 クエリーの解析 Workload Management

Redshift のアーキテクチャ

Redshift のアーキテクチャ MPP( 超並列演算 ) CPU Disk Network I/O の並列化 論理的なリソースの括り ノードスライス データの格納 列指向 ( カラムナ ) 圧縮 データの通信 コンピュート ノード間の通信 各コンピュート ノードからリーダー ノードへの通信 他の AWS サービスとの通信

アーキテクチャ :MPP( 超並列演算 ) コンパイル コードの生成と配信 SELECT * FROM lineitem; CPU CPU CPU CPU CPU CPU

アーキテクチャ : クエリーの並列実行 SELECT * FROM part; SELECT * FROM lineitem; クエリー最大同時実行数 :50 CPU CPU CPU CPU CPU CPU

アーキテクチャ : ノードスライス ノードスライス = メモリとディスクを CPU コアと同数に分割した論理的な単位 CPU CPU CPU CPU CPU CPU

アーキテクチャ : 列指向 行指向 (RDBMS) 列指向 (Redshift) orderid name price 1 Book 100 2 Pen 50 n Eraser 70 orderid name price 1 Book 100 2 Pen 50 n Eraser 70

データの平準化 ノード間のデータ容量の偏りはクエリー実行時間に影響を与える CPU CPU CPU CPU CPU CPU

データの転送 リーダー ノードに各ノードの結果を集約 自ノードに必要なデータがない場合 データ転送が発生 - 単一ノード - ブロードキャスト

検証用環境

検証用環境 Redshift クラスタ dw2.8xlarge (SSD) * 4 台スライス数 : 32 * 4 = 128 スキーマ (TPC-H) lineitem : 約 60 億行 part : 約 2 億行

サンプル テーブル (TPC-H から ) CREATE TABLE part ( p_partkey int8 NOT NULL, p_name varchar(55) NOT NULL, p_mfgr char(25) NOT NULL, p_brand char(10) NOT NULL, p_type varchar(25) NOT NULL, p_size int4 NOT NULL, p_container char(10) NOT NULL, p_retailprice numeric(12,2) NOT NULL, p_comment varchar(23) NOT NULL );

サンプル クエリー select sum(l_extendedprice* (1 - l_discount)) as revenue from lineitem, part Where (p_partkey = l_partkey or ( ) or ( ); and p_brand = 'Brand#12' and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') and l_quantity >= 3 and l_quantity <= 3 + 10 and p_size between 1 and 5 and l_shipmode in ('AIR', 'AIR REG') and l_shipinstruct = 'DELIVER IN PERSON')

テーブル設計

テーブルの分散方式 EVEN 各レコードがスライスにラウンドロビンで分散されるため均等にデータが蓄積される DISTKEY 明示的に指定したカラムを基準に 各レコードのスライスへの配置が決定される カラムのカーディナリティによっては スライス間で大幅な偏りが生じる ALL 全てのレコードが各コンピュート ノードに配置される

EVEN vs. DISTKEY(1) EVEN select trim(name) tablename, slice, sum(rows) from stv_tbl_perm where name='part' group by name, slice 各スライスに均等に分散 order by slice; tablename slice sum -----------+-------+--------- part 0 1600000 part 1 1600000 part 126 1600000 part 127 1600000 DISTKEY=p_partkey キーのカーディナリティに依存 tablename slice sum -----------+-------+--------- part 0 1596925 part 1 1597634 part 126 1610452 part 127 1596154

EVEN vs. DISTKEY(2) DISTKEY = p_brand tablename slice sum -----------+-------+--------- part 0 0 part 1 0 part 2 0 part 3 0 part 4 8193350 part 118 8193342 part 119 0 part 120 16384823 part 121 8191943 カーディナリティの低いカラムでは データの極端な偏りが生じる場合がある = 効率の悪いクエリー

ALL 全レコードが各ノードの特定スライスに集約 tablename slice sum -----------+-------+--------- part 0 204800000 part 1 0 part 2 0 part 3 0 part 4 0 part 96 204800000 part 97 0 part 98 0 各ノードの先頭スライスに全レコードが格納される

コロケーション (1) 関連するレコードのコロケーション ジョイン対象となるレコードを同一ノードに集める コロケーションの方法 1. ジョインに使用するカラムを DISTKEY として作成または 2. 分散方式 ALL でテーブルを作成 ( マスター テーブルなど ) select sum(l_extendedprice* (1 - l_discount)) as revenue from lineitem, part Where (p_partkey = l_partkey または 2. テーブルを ALL で作成 1. それぞれを DISTKEY として作成

コロケーション (2):DISTKEY part 6200995 almond pale linen Manufacturer#3 Brand#32 lineitem 5024338535 6200995 0.01 0.08 A F 1992-01-02 1992-02-14 part 2201039 almond pale linen Manufacturer#1 Brand#11 lineitem 121932093 2201039 0.05 0.43 D E 1994-07-11 1994-08-23

コロケーション (3):ALL 更新 : 全ノードにレプリケーションクエリー : ジョインはローカルで完結 part p_partkey lineitem l_partkey part p_partkey lineitem l_partkey

設計のポイント - 分散方式 小規模なテーブル ( マスター テーブル ) は ALL で作成 ジョインを避けてテーブルを非正規化し EVEN で作成 複数テーブルに対して ジョイン対象のキーを DISTKEY で作成 ( コロケーション )

データのソート - SORTKEY ソートキーに指定した列の値がブロック上にソートされた状態で格納される ソート順序を考慮した上で 最適なクエリー プランが構築される 各ブロックの最小 最大値をトラッキングしテーブル スキャン時に 対象外のブロックをスキップ

SORTKEYの例 orderid I0001 I0002 I0003 I0004 orderdate 2013/07/17 2013/07/18 2013/07/18 2003/07/19 SELECT * FROM orders WHERE orderdate BETWEEN 2013-08-01 AND 2013-08-31 ; I0020 I0021 クエリーに関係のないデータ ブロック I0022 はスキップし 該当するブロックだけを I0023 読込む 2013/08/20 2013/08/21 2013/08/22 2013/08/22

実行時間 SORTKEY の比較 p_size 列に SORTKEY を指定 実行クエリー select count(*) from part where p_size between 5 and 8 order by 1; SORTKEY の効果 count ---------- 16381983 (1 row) SORTKEY なし SORTKEY=p_size 1 2 3 実施回数

設計のポイント (SORTKEY) クエリー対象外のブロックをスキップすることにより ディスク I/O を効率化 日付 (DATE または TIMESTAMP) 等の増加する型が一般的に用いられる ジョインには ハッシュジョインより効率的なマージジョインが適用 -> カラムが DISTKEY 且つ SORTKEY である場合

補足 : データの蓄積 (1) 2 col1 1 CREATE TABLE mytable ( col1 INTEGER, ) DISTSTYLE EVEN; INSERT mytable VALUES(1); INSERT mytable VALUES(2); 23 col1 2

補足 : データの蓄積 (2) INSERT INTO mytable VALUES(1); select tbl, col, slice, blocknum from stv_blocklist where tbl = (select oid from pg_class where relname = 'mytable') order by slice, col, blocknum; tbl col slice blocknum --------+-----+-------+---------- 108247 0 2 0 108247 1 2 0 108247 2 2 0 108247 3 2 0 (4 rows) COL1 ROWID トランザクション管理用

補足 : データの蓄積 (3) INSERT INTO mytable VALUES(2); tbl col slice blocknum --------+-----+-------+---------- 108247 0 2 0 108247 1 2 0 108247 2 2 0 108247 3 2 0 108247 0 23 0 108247 1 23 0 108247 2 23 0 108247 3 23 0 (8 rows) DISTSTYLEがEVENであるため 別スライスに新たなブロックが作成される

クエリーの解析

クエリー プランの読み方 (1) explain select sum(l_extendedprice * (1 - l_discount)) as revenue XN Aggregate (cost=98294752948050.66..98294752948050.66 rows=1 width=22) -> XN Hash Join DS_BCAST_INNER \ (cost=3071948.80..98294752947793.28 rows=102946 width=22) -> XN Seq Scan on lineitem (cost=0.00..107520152.32 \ 全体のコストと各ステップにかかる相対的なコストが記載 -> どのステップが高コストかを判断 rows=222736043 width=40) -> XN Hash (cost=2560000.00..2560000.00 rows=204779520 width=40) -> XN Seq Scan on part (cost=0.00..2560000.00 \ rows=204779520 width=40)

クエリー プランの読み方 (2) explain select sum(l_extendedprice * (1 - l_discount)) as revenue XN Aggregate (cost=98294752948050.66..98294752948050.66 rows=1 width=22) -> XN Hash Join DS_BCAST_INNER \ (cost=3071948.80..98294752947793.28 ジョイン時のインナー rows=102946 width=22) -> XN Seq Scan on lineitem (cost=0.00..107520152.32 \ テーブルの取り扱い rows=222736043 width=40) -> XN Hash (cost=2560000.00..2560000.00 rows=204779520 width=40) -> XN Seq Scan on part (cost=0.00..2560000.00 \ rows=204779520 width=40)

データ転送の極小化 (1) ジョインやグループ関数を伴うクエリーは 多量のデータ転送が発生する可能性がある データ転送のオプション DS_DIST_NONE DS_DIST_ALL_NONE:Good DS_DIST_INNER DS_DIST_ALL_INNER: インナーテーブルの転送 DS_BCAST_INNER: インナーテーブルの全ノードへの転送 DS_DIST_BOTH: インナー アウターテーブルの転送

データ転送の極小化 (2) 特に DS_BCAST_INNER と DS_DIST_BOTH は排除すべき テーブルのコロケーションが対処法となる 1. ジョインに使用するカラムを DISTKEY として作成または 2. 分散方式 ALL でテーブルを作成 ( マスター テーブルなど )

中間結果の出力 Redshift は中間結果をディスクに書込む メモリの枯渇を防ぎ 確実にクエリーを実行 更なるディスクI/Oは パフォーマンスの劣化を生じる // どのステップでI/Oが発生しているかを特定 select query, step, rows, workmem, label, is_diskbased from svl_query_summary where query = 1025 order by workmem desc; query step rows workmem label is_diskbased -----+-----+--------+-----------+---------------+-------------- 1025 0 16000000 141557760 scan tbl=9 f 1025 2 16000000 135266304 hash tbl=142 t

クエリー解析のポイント クエリー プランから 相対的に高コストなステップを割り出す 中間結果の出力が高コストの起因となっていないか クエリーの書換えやコロケーションを含むテーブル定義の変更を検討

Workload Management

Workload Management の概要 長期実行クエリーは クラスタ全体のボトルネックとなり 短期実行クエリーを待たせる可能性がある クエリー並列度の上限を設けた複数のキューを定義 クエリーを指定されたキューにルーティング

WLM の実装 (1) User Group A Long Query Group Long-running queue Short-running queue

WLM の実装 (2) 1 5

WLM の効果 キュー単位でクエリー並列度を保障 メモリのアロケーションも指定可能 特定ユーザ ( 群 ) によるクラスタ占有を回避 並列度の増加は 性能の向上にはつながらない -> リソース競合の可能性

WLM の制限 複数キュー間のリソース共有や重みづけ キューの動的な設定変更 -> クラスタの再起動が必要

性能比較 (1) クライアント アプリ :49 スレッド並列 WLM キューの並列数 :1,10,25,35,49 1 5

性能比較 (2) 高並列度 性能向上 実行時間 vs. クエリー並列度 並列度 1 並列度 10 並列度 25 並列度 35 並列度 49 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49

まとめ テーブル設計の段階で 分散方式を検討 データ転送を極小化するため コロケーションを活用 WLM により適切なリソース配分を行う

2014.09.09 SAVE THE DATE http://csd.awseventsjapan.com/ Cloud Storage & DB Day 検索

ご清聴ありがとうございました