Presentation Title Here

Similar documents
PowerPoint Presentation

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

PowerPoint Presentation

Enterprise Cloud + 紹介資料

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第8版  

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第7版   None

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

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

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

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

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

Oracle Data Pumpのパラレル機能

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

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

データベースの近代化:シンプルなクロスプラットフォーム、最小のダウンタイムで実現するクラウド移行

データベースアクセス

Microsoft Word - JDBC検証 docx

PowerPoint Presentation

データベース暗号化ツール「D’Amo」性能検証

Microsoft Word - nvsi_050110jp_netvault_vtl_on_dothill_sannetII.doc

intra-mart Accel Platform

Microsoft PowerPoint pptx

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

MxLogonサーバサイドツールキット用UI

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

— intra-mart Accel Platform セットアップガイド (WebSphere編)   第7版  

Microsoft Word - JDBC-ODBCu691cu8a3c docx

DragonDisk

Sharing the Development Database

第 7 章 ユーザー データ用表領域の管理 この章では 表や索引を格納するユーザー データ用表領域の作成や 作成後のメンテナンスに ついて解説します 1. ユーザー データ用表領域の管理概要 2. ユーザー データ用表領域作成時の考慮事項 3. ユーザー データ用表領域の作成 4. ユーザー データ

Amazon Redshift - 入門ガイド

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

VPN 接続の設定

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

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

そこが知りたい!AWSクラウドのセキュリティ

Maser - User Operation Manual

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

PowerPoint プレゼンテーション

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

【Cosminexus V9】クラウドサービスプラットフォーム Cosminexus

TFTP serverの実装

VB実用Ⅲ⑩ フリーデータベースⅡ

Oracle SQL Developer Data Modeler

SIOS Protection Suite for Linux v9.3.2 AWS Direct Connect 接続クイックスタートガイド 2019 年 4 月

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

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

Oracle Real Application Clusters 10g: 第4世代

スライド 1

PostgreSQL Plus 管理者ガイド

Microsoft Word - tutorial3-dbreverse.docx

スライド 1

Joint Content Development Proposal Tech Docs and Curriculum

HeartCoreインストールマニュアル

,, create table drop table alter table

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

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

使用する前に

Microsoft Word - nvsi_080188jp_r1_netvault_oracle_rac_backup_complemental_guide_j_174x217.doc

Oracle Data Pumpのパラレル機能

Hadoop LZO圧縮機能の検証

PowerPoint Presentation

MAGNIA Storage Server Configuration Guide

Postgres Plus Advanced Server 9.3パーティションテーブルの特徴と性能検証レポート

ERDAS IMAGINE における処理速度の向上 株式会社ベストシステムズ PASCO CORPORATION 2015

VNX ファイル ストレージの管理

OSSTechプレゼンテーション

Microsoft PowerPoint - db03-5.ppt

Transcription:

Amazon Redshift AWS Black Belt Tech Webinar 2015 アマゾンウェブサービスジャパン株式会社下佐粉昭 2015/08/26 (2015/11/25 更新 ) 1

自己紹介 名前 下佐粉 昭 しもさこ あきら Twitter - @simosako 所属 アマゾンデータサービスジャパン株式会社 技術本部 ソリューションアーキテクト 好きなAWSサービス:Redshift, RDS, S3 人間が運用等から開放されて楽になる系の サービスが好きです 2

アジェンダ Amazon Redshiftとは パフォーマンスを意識した表設計 Amazon Redshiftの運用 Workload Management (WLM) ユーザ定義関数 UDF まとめ 補足資料 COPYコマンド 3

Amazon Redshift とは? 4

Amazon Redshiftの概要 クラウド上のDWH 数クリックで起動 使った分だけの支払い 高いパフォーマンス ハイ スケーラビリティ 高い汎用性 PostgreSQL互換のSQL 多くのBIツールがサポート 5

MPPとシェアードナッシングがスケールアウトの鍵 MPP : Massive Parallel Processing 1つのタスクを複数のノードで分散して実行する仕組み Redshiftではリーダーノードがタスクをコンピュートノードに分 散して実行する ノードを追加する スケールアウト でパフォーマンス向上可能 シェアードナッシング ディスクをノードで共有しない構成 ディスクを共有するとノード数が増えた時にボトルネックになる ため それを回避 ノードとディスクがセットで増えていく 6

Redshiftの構成① リーダーノードがクライア ントからSQLを受け取る SELECT * FROM lineitem; 1つの表を各ノード のストレージに分散 して保存 シェアー ドナッシング Leaderノード Computeノード CPU 7 CPU CPU CPU CPU CPU

Redshiftの構成② スライス メモリとディスクを ノード内で分割した論 理的な処理単位 SQLをコンパイル コードを生成し コン ピュートノードへ配信 SELECT * FROM lineitem; Leaderノード コンピュートノードの追 加でパフォーマンス向上 スケールアウト Computeノード CPU 8 CPU CPU CPU CPU CPU

ノードタイプ SSDベースのDCとHDDベースのDSから選択 データは圧縮されて格納されるため ストレージ総量より多くのデータが格納可能 最大100ノード 1.6PByteまで拡張可能 ノードタイプと数は後から変更可能 価格は東京リージョンにおいて2015年11月25日時点のものです DC1 - Dense Compute vcpu メモリ(GB) ストレージ ノード数 dc1.large 2 15 0.16TB SSD 1~32 $0.314 /1時間 dc1.8xlarge 32 244 2.56TB SSD 2~100 $6.095 /1時間 DS2 Dense Storage 9 価格( ) New!! ds2.xlarge 4 31 2TB HDD 1~32 $1.190 /1時間 ds2.8xlarge 36 244 16TB HDD 2~100 $9.520 /1時間

補足 リーダーノードと利用費用 リーダーノードもコンピュートノードも同じ ノードタイプで構成される リーダーノード分は利用費用が不要 1ノード構成にした場合 リーダーノードとコ ンピュートノードが1ノードに同居する 10

IOを削減する① - 列指向型 カラムナ DWH用途に適した格納方法 行指向型 他RDBMS 列指向型 Redshift orderid name price orderid name price 1 Book 100 1 Book 100 2 Pen 50 2 Pen 50 n 11 Eraser 70 n Eraser 70

IOを削減する② - 圧縮 データは圧縮してストレージに格納 される カラムナのため類似したデータが集 まり 高い圧縮率 エンコード 圧縮アルゴリズム は 列ごとに選択可能 COPYコマンドやANALYZEコマンド で圧縮アルゴリズムの推奨を得るこ とが可能 12 analyze compression listing; Table Column Encoding ---------+----------------+---------listing listid delta listing sellerid delta32k listing eventid delta32k listing dateid bytedict listing numtickets bytedict listing priceperticket delta32k listing totalprice mostly32 listing listtime raw

IOを削減する③ - ゾーンマップ Redshiftは ブロック 単位で ディスクにデータを格納 1ブロック 1MB 10 324 375 623 ブロック内の最小値と最大値をメ モリに保存 不要なブロックを読み飛ばすこと が可能 13 10 13 14 26 100 245 324 375 393 417 512 549 623 637 637 712 809 959 834 921 959

フルマネージドサービス 設計 構築 運用の手間を削減 数クリックで起動 1時間単位の費用 ノード数やタイプは後から変更可能 バックアップ(Snapshot)やモニタリング機能を内蔵 GUI マネジメントコンソール API経由で操作も可能 パッチ適用も自動的 メンテナンスウィンドウでパッチの時間帯を指定可能 14

Redshiftが向く用途 特化型のデータベースのため 適した用途に使うことで パフォーマンスを発揮します Redshiftに向くワークロード 巨大なデータ セット 数百GB ペタバイト 1つ1つのSQLが複雑だが 同時実行SQLは少ない データの更新は一括導入 ユースケース データウェアハウス DWH ユーザがクエリーを作成する 自由クエリー BI等 15

Redshiftの特徴を生かせないユースケース SQLの並列実行数が多い 同時接続数ではなく同時実行数 RDS MySQL,PostgreSQL, Oracle, SQL Server)を検討 極めて短いレーテンシが必要なケース ElastiCache (インメモリDB)やRDSを検討 ランダム かつパラレルな更新アクセス RDSもしくはDynamoDB (NoSQL)を検討 巨大なデータを格納するが集計等はしない DynamoDBや大きいインスタンスのRDSを検討 16

Amazon Redshiftの位置づけ データ ストアの特性に応じた使い分け 低レンテンシ インメモリ トランザク ション処理 汎用用途 SQL Amazon RDS 17 集計 分析処理 大容量データ DWH Amazon DynamoDB Amazon ElastiCache 3拠点間での レプリケーション SSDに永続化 NoSQL Amazon Redshift

パフォーマンスを意識した表設計 18

DDLによるパフォーマンスの最適化 ディスクIOを削減する サイズを減らす 読む範囲を減らす ノード間通信を削減する 通信しないようなデータ配置 19

ディスクIOを削減する 型を適切に選択する 型を適切に選択してサイズを節約する 20 不必要に大きい型を選択しない BIGINT(8バイト)よりも INT(4バイト)やSMALLINT(2バイト) FLOAT(8バイト)よりも REAL(4バイト 日付は文字列(CHAR)で格納せずTIME型を使用

Redshiftで利用可能な型 下表の型をサポート charはシングルバイトのみサポート varcharはutf-8形式でのマルチバイトをサポート 参照 http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_unsupported-postgresql-datatypes.html 21

ディスクIOを削減する 適切な圧縮方法の選択 圧縮を行うことで 一度のディスクアクセスで読み込める データ量が多くなり 速度の向上が見込める 圧縮のエンコード アルゴリズム が複数用意されており CREATE TABLEで各列に選択することが可能 CREATE TABLE table_name ( 列名 型 ENCODE エンコード, ) 動的には変更できない (作りなおして INSERT SELECT 22

圧縮エンコーディングの種類 データの特性に応じたエンコーディングを選択するのが理想 ANALYZE COMPRESSIONコマンドで推奨を確認可能 先にデータの投入が必要 LZOは比較的多くのケースで有効 23

圧縮エンコーディングの確認 pg_table_def のencoding列で確認可能 mydb=# select "column",type,encoding from pg_table_def where tablename='customer_enc'; column type encoding --------------+-----------------------+---------c_custkey integer delta c_name character varying(25) lzo c_address character varying(25) lzo c_city character varying(10) bytedict c_nation character varying(15) bytedict c_region character varying(12) bytedict c_phone character varying(15) lzo c_mktsegment character varying(10) bytedict 24 24

ディスクアクセスの範囲を最小にする SORTKEY SORTKEYに応じて ディスク上にデータが順序を守って格納 クエリー オプティマイザはソート順序を考慮し 最適なプランを構築 CREATE TABLE時に指定 複数列が指定可能 CREATE TABLE t1( ) SORTKEY (c1,c2 ) SORTKEYの使いどころ 頻繁に特定のカラムに対して 範囲または等式検索を行う場合 例 時刻列 頻繁にジョインを行う場合 該当カラムをSORTKEYおよびDISTKEYとし て指定 ハッシュ ジョインの代わりにソート マージ ジョインが選択 される 25 25

SORTKEY の例 orderdate 列を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 I0020 2013-08-31 ; I0021 I0022 クエリで必要なデータが固まっているた I0023 めディスクアクセス回数が減少 26 2013/08/20 2013/08/21 2013/08/22 2013/08/22

Interleaved Sort Key New!! 新しいSort keyのメカニズム 最大8つまでのSort Key列を指定でき それぞれ同等に扱わ れる CREATE TABLE ~ INTERLEAVED SORTKEY (deptid, locid); 旧来のSortで複数のキーを指定する場合 Compound Sort Key)とは特性が異なり 各列を同等に扱う Interleaved Sort Keyが有効なケース どのキーがWHERE句で指定されるか絞り切れないケース 複数キーのAND条件で検索されるケース 27

Interleaved Sort Keyのデータ配置イメージ Interleaved Sort Key Compound Sort Key DeptId LocId 28 DeptId LocId DeptId LocId DeptId LocId 1 A 3 A 1 A 3 A 1 B 3 B 1 B 3 B 1 C 3 C 2 A 4 A 1 D 3 D 2 B 4 B 2 A 4 A 1 C 3 C 2 B 4 B 1 C 3 D 2 C 4 C 2 D 4 C 2 D 4 D 2 D 4 D DeptId = 1 -> 1 block LocId = C -> 4 block DeptId = 1 -> 2 block LocId = C -> 2 block DeptId=1 and LocId=C-> 1 block

データの平準化:各ノードのデータサイズが著しく異なると パフォーマンスに影響が出る ノード間のデータ容量 の偏りはクエリー実行 時間に影響を与える CPU 29 CPU CPU CPU CPU CPU

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

ディストリビューションの選択 CREATE TABLE t( ) DISTSTYLE { EVEN KEY ALL } EVEN KEY(DISTKEY) ラウンドロビンで均一分散 デフォルト Slice 1 Slice 2 Node 1 31 Slice 3 Slice 4 Node 2 同じキーを同じ場所に Slice 1 Slice 2 Node 1 Slice 3 Slice 4 Node 2 ALL 全ノードにデータをコ ピー Slice 1 Slice 2 Node 1 Slice 3 Slice 4 Node 2

EVEN vs. DISTKEY 1 EVEN DISTKEY=p_partkey 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 32 キーのカーディナリティに依存 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 33 カーディナリティの低い カラムでは データの極端な 偏りが生じる場合がある = クエリー処理効率の低下

ALL 全レコードが各ノードの特定スライスに集約 34 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 35 1. それぞれをDISTKEYとして作成 または 2. テーブルをALLで作成

コロケーション (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 36

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

テーブル設計のポイント ディスクIOを最小にする 適切な型の選択 適切な圧縮アルゴリズム ソートキーの設定 ネットワーク転送を最小にする 小規模なテーブル マスター テーブル はALLで作成する 多くのテーブルはEVENで作成するだけで十分なパフォーマンスが 出ることが多い ジョインのパフォーマンスを最適化するにはジョイン対象のキーを DISTKEYで作成 コロケーション 大福帳のようなジョイン済 非正規化 表はEVENで分散 38

Amazon Redshift の運用 39

Amazon Redshiftへのデータ投入 オーバービュー ソースDB AWS Direct Connect Amazon RDS Data Volume Amazon Glacier Amazon Elastic MapReduce EC2/オンプレ (SSH経由) Amazon DynamoDB VPN Connection Amazon S3 logs / files S3 Multipart Upload オンプレミス データセンター 40 Amazon Redshift AWS Cloud

S3を起点としたRedshift運用の基本的な流れ 1. ロードするデータ ファイル をS3に 置く S3 COPY 2. COPYコマンドでデータを高速ロード 3. Analyze Vacuumを実行 4. バックアップ SNAPSHOT を実行 5. SQLを投入して利用開始 1.へ戻る 41 運用コマンド Redshift SQL 管理者 一般ユーザ

S3からデータをCOPYする ファイルをS3のバケットに置く カンマや 等で区切られたテキストファイル形式(delimiterオプションで指定 文字コードはUTF-8(デフォルト とUTF-16をサポート ファイルサイズが大きい場合は圧縮し 後述 マルチパートアップロードする Redshiftに接続してcopyコマンドを実行 S3にアクセスするためのアクセスキーが必要 別リージョン内のS3バケットからのCOPYも可能 (REGIONオプションを指定 自動圧縮される 列にエンコーディング定義がなく かつ1行も導入されていない場合に実施される COMPUPDATE OFFオプションを指定すると自動圧縮無しでCOPY copy customer from 's3://mybucket/customer/customer.tbl credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key> delimiter ' ' 42

COPYの速度を上げるには 元ファイルを圧縮する(gzipもしくはlzo) COPYでgzip もしくはlzoオプションを指定 ファイルを分割する スライス数の倍数が最適 並列にロードされるため高速にロード可能 ファイル名は customer.tbl.1.gz, customer.tbl.2.gz の ように 指定した名前で前方一致出来るように作成 copy customer from 's3://mybucket/customer/customer.tbl credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key> gzip delimiter ' ' 43

制約について Redshiftには制約が存在しない ユニーク制約 プライマリーキー 外部キー 検査制約が無い ユーザ側の工夫でユニーク性を担保する 例 一旦データをテンポラリ表にインサートもしくはCOPYし SELECT DISTINCTしたデータをインサートする 制約やプライマリーキーの作成は可能 作成する事でオプティ マイザーにデータの特性情報を伝えることが可能 44

テーブルのANALYZE 統計情報はクエリプラン決定の元データとして利用される ANALYZEコマンドで統計情報を最新に保つことで最適なパフォー マンスを維持 データベース 全体 ANALYZEコマンド 単一のテーブ ル データ投入や更新の後 定期的にデータベース全 体にANALYZEを実行 新しいテーブルを作った らANALYZEを実行 45 テーブルの特 定の列 ANALYZEコマ ンドは行のサン プルを取得し 計算を行った後 に統計情報を保 存 統計情報 よく使われる列はANALYZEを行う ソートやグループ化 結合の対象 WHERE句の条件

テーブルのVACUUM Redshiftのデータ更新は 追記型 削除しても削除がマークされるだけでディスク上にはデータが残っている VACUUMコマンドで不要領域を削除 コンパクション し 同時にソート 順にデータを並べ替える x 1,2,3,4 xxx RFK,JFK,LBJ,GWB xxxxxxxxxxxxxxx 900 Columbus,800 Washington, 700 Foxborough,600 Kansas VACUUM Customer; 1,2,4 46 RFK,JFK,GWB DELETE/UPDATEによって空い た未使用領域はVACUUMコマ ンドを実行することでコンパク ションされる 900 Columbus,800 Washington,600 Kansas

VACUUMコマンド VACUUM [ FULL SORT ONLY DELETE ONLY REINDEX ] [ table_name ] 通常はFULLを実行 コンパクション ソート コンパクションだけ実行するにはDELETE ONLY ソートだけ実行するにはSORT ONLY Interleaved Sortした表にはREINDEXを指定 コンパクション Interleaved Sort順に並べ替えを実行 47

バックアップ機能 スナップショット ディスクイメージをS3へバックアップ 自動スナップショット 手動スナップショット ユーザが任意のタイミングで実行 マネジメントコンソールから Take Snapshot を選択し 任意のIDを付けるだけでバックアップ開始 48

他リージョンへのスナップショット 既存クラスタのスナップショットを 別リージョンに作成可能 リテンション ピリオド 保存期 間 の指定も可能 最大35日 New!! KMS暗号化済のスナップショット 転送にも対応 リージョン間のデータ転送費用が発 生 49

Redshiftのモニタリング コンソールビルトインのGUI リソース使用率 EXPLAIN 実行クエリー履歴 等 API経由でデータ取得可能 CloudWatch 50

Redshiftへの接続(1) JDBCとODBCの専用ドライバーが用意さ れている 管理コンソールからラウンロード可能 PostgreSQLとプロトコル互換性が有り PostgreSQLドライバーでも接続可能 psqlコマンドでも接続可能 極力Redshift専用ドライバーの利用を 推奨 51

Redshiftへの接続(2) RedshiftにパブリックIPを付与して AWS外から直接接続が可能 New!! : 2015/11/20 パブリックIPの付与 取り外しは動的に変更可能です 考慮点1 暗号化 ODBCもJDBCもSSLで暗号化可能 ただしJDBCの場合KeytoolでSSL Certificateの導入が必要 考慮点2 TCP/IP通信の切断防止 長い時間が掛かるSQLやCOPYを実行すると 応答を待ちきれずにTCP/IP接続が切断され るケースがありえます JDBCやODBCの接続パラメータ もしくはアプリからドライバに対して設定 Redshift専用のJDBC/ODBCドライバではKeep AliveがデフォルトでON もしくはクライアント側のTCP/IP設定を変える OS内の全アプリが影響を受けます 52 https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/connecting-sslsupport.html#connecting-ssl-support-java http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-firewall-guidance.html

Workload Management (WLM) 53

Workload Management (WLM) 実行に長い時間を用するクエリー ロングクエ リー は クラスタ全体のボトルネックとなり ショートクエリーを待たせる可能性がある WLMで用途ごとに クエリー並列度の上限を設 けた複数のキューを定義することでクエリー処 理の制御が可能 54

Workload Management 実行に長い時間を用するクエリー ( ロングクエリー ) は クラスタ全体のボトルネックとなり ショートクエリーを待たせる可能性がある WLM で用途ごとに クエリー並列度の上限を設けた複数のキューを定義することでクエリー処理の制御が可能 デフォルトでは Redshift クラスタは単一のキューで構成されている Default queue Running 55

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

WLMの実装 2 1 5 57

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

WLMパラメータとパラメータの動的変更 New!! 新しくWLMのパラメータにdynamicとstaticの区別が用意され dynamicはredshiftを再起動せずにパラメータ変更が可能に dynamic parameter Concurrency(並列実行数), Percent of memory to use (メモリ使用量) static parameter 59 User groups User group wildcard Query groups Query group wildcard Timeout

UDF ( ユーザ定義関数 ) 2015/09/13: 資料追加 60

RedshiftのUDFサポート NEW! クラスターバージョン v.1.0.991以降で利用可能 UDF ユーザ定義関数 ユーザが独自の関数を定義できる機能 Python言語で記述 スカラー関数の作成をサポート スカラー 1つの入力値ごとに 1つの値を返す関数 61

UDF定義の例 例 引数aとbを比較して大きい方を返すUDF CREATE FUNCTION f_greater (a float, b float) RETURNS float STABLE AS $$ if a > b: return a return b $$ LANGUAGE plpythonu; SELECT f_greater (c1, c2) FROM t1 62

UDFの登録~実行 1. 2. 3. UDFを登録 リーダーノードでバイトコードにコンパイルし 各コンピュートノードに転送 SQLからUDFが呼び出されると 各コンピュートノード内でPythonインタプリタが起 動して実行 UDFを実行するPythonインタープリタはサンドボックス環境に置かれ リソースが制限されている CREATE FUNCTION Python インタープリタ バイト コード 63 Python インタープリタ バイト コード リーダーノード Python インタープリタ バイト コード コンピュートノード

UDFの定義 CREATE [OR REPLACE] FUNCTION f_function_name ( [引数の名前 引数の型,... ] ) RETURNS data_type { VOLATILE STABLE IMMUTABLE } AS $$ (ここにコード $$ LANGUAGE plpythonu; 名前は既存関数と被らないように注意 引数が異なる関数は別のものとして定義可能 オーバーロード可能 例 f_を先頭に付けるといったルールでredshift既存関数との名前被りを避け る(f_はRedshiftビルトイン関数では使わない事が保証されている もしくはスキーマで分ける ただしデフォルトではビルトイン関数が優先され るので注意 SET search_pathで調整は可能 Redshiftの型はPythonの型に変換されるため その型と Pythonプログラム側の型が合っている必要がある 64

UDFの定義② - 型変換 Redshiftのdecimal がPythonのfloatに マッピングされる 点に注意 65 Redshiftの型 Pythonの型 smallint integer bigint long long short long decimal double real float boolean bool char varchar string timestamp datetime

UDFの定義③ - 最適化オプション CREATE [OR REPLACE] FUNCTION f_function_name ( [引数の名前 引数の型,... ] ) RETURNS data_type { VOLATILE STABLE IMMUTABLE } AS $$ (ここにコード $$ LANGUAGE plpythonu; VOLATILE デフォルト 同じ引数であっても異なる値が変える可能性を指定 実行するたびに毎回計算しなおします STABLE 1クエリー内での処理中で かつ同一の引数の場合に同じ結果が返る関数に指定 オプティマイザーは一度実行した結果をクエリー内で再利用します IMMUTABLE 同一の引数であれば常に同じ結果が返る関数に指定 オプティマイザーは関数を即値に置き換えます 66

UDFで利用可能なPythonライブラリ import文でライブラリを読み込み可能 Python 2.7.8標準ライブラリが導入済 https://docs.python.org/2/library/index.html ただし以下は 含まない ScrolledText Tix Tkinter tk turtle smtpd 加えて以下のライブラリを含んでいる 67 numpy 1.8.2 pandas 0.14.1 python-dateutil 2.2 pytz 2014.7 scipy 0.12.1 six 1.3.0 wsgiref 0.1.2

カスタムライブラリ機能 独自のPythonのライブラリを登録しておいて UDFで使う事が 可能 CREATE LIBRARY library_name LANGUAGE plpythonu FROM { 'https://file_url' 's3://bucketname/file_name' [ WITH ] CREDENTIALS [AS] 'aws_access_credentials' [ REGION [AS] 'aws_region' ] [ ENCRYPTED ] } 登録できるのはSuper Userのみ S3もしくはHTTPSアクセス可能なところにライブラリファイルを置き 名前を付けて登録 68 *.tar.gzか*.zip形式で保存 Python 2.7.6以降で動くもの PG_LIBRARY表に登録ライブラリ一覧が記録されます CREDENTIALはS3から読み取る場合に必要 AWSのアクセスキー

権限 UDFの作成 Admin以外がUDFを作成にするは 権限付与が必要 例 GRANT USAGE ON LANGUAGE plpythonu TO ユーザ名; UDFの削除 リプレース Admin もしくはUDFの作者のみ可能 UDFの実行 UDFへの実行 EXECUTE)パーミッションが必要 ただし新規に作成されるUDFはPUBLICユーザグループのEXECUTE権限で実行が可能 上記をやめるには PUBLICからEXECUTE権限をREVOKEする 参照 http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/udf-security-andprivileges.html 69

UDF 注意点 1 UDFからはネットワークアクセスやファイルIOは 出来ないように制限されている 2 ユーザライブラリの登録は合計100MBまで 3 UDFの並列実行はWLM設定の1/4に制限される 例 WLMの並列度 15のキューでは UDFの並列度は3 70

まとめ DWH的用途に特化したRDB ペタバイト級まで拡張可能 クラウドの良さを活かせるDWH マネージド サービス 機器セットアップやインストールの手間なし バックアップ スナップショット が自動 その他運用に必要な各種機能 モニタリング EXPLAIN等 をビルトインで提供 チューニングポイント 71 ディスクIOの削減 圧縮 ソートキー ネットワーク通信の削減 分散の調整 Workload Management

Redshift 参考資料 ドキュメント https://aws.amazon.com/jp/documentation/redshift/ フォーラム https://forums.aws.amazon.com/forum.jspa?forumid=155& start=0 新機能アナウンスメント https://forums.aws.amazon.com/thread.jspa?threadid=132 076&tstart=25 Amazon Redshift Utils on github https://github.com/awslabs/amazon-redshift-utils 72

Q&A 次回 Webinar のお申し込み http://aws.amazon.com/jp/event_schedule/ 73

Webinar資料の配置場所 AWS クラウドサービス活用資料集 http://aws.amazon.com/jp/aws-jp-introduction/ 74

公式 Twitter/Facebook AWS の最新情報をお届けします @awscloud_jp 検索 最新技術情報 イベント情報 お役立ち情報 お得なキャンペーン情報などを日々更新しています! 75 もしくは http://on.fb.me/1vr8ywm

AWS初心者向けWebinar AWSをこれからご使用になる向けのソリュー ションカットのオンラインセミナー http://aws.amazon.com/jp/about-aws/events/ 76

ご参加ありがとうございました 77

補足資料 :COPY コマンド 78

MANIFESTファイルによるファイル指定 MANIFESTファイルにより 特定のファイル群 をS3バケットからCOPYできる { "entries": [ {"url":"s3://mybucket-alpha/2013-10-04-custdata", "mandatory":true}, {"url":"s3://mybucket-alpha/2013-10-05-custdata", "mandatory":true}, {"url":"s3://mybucket-beta/2013-10-04-custdata", "mandatory":true}, {"url":"s3://mybucket-beta/2013-10-05-custdata", "mandatory":true} ] } 79

COPYコマンド その他の機能 JSONファイルのCOPY データ構造の自動認識あるいはJSONPathによる定義 New!! Avroフォーマットへの対応 Amazon EMRからの読み込み クラスタID HDFSのパス copy sales from 'emr:// j-1h7ouo3b52hi5/myoutput/part*' credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-accesskey>'; 80