SlideShare a Scribd company logo
RDB入門
~アプリケーション開発者が陥りやすいDB開発の落とし穴~




 18-E-6               磯辺 信雄
                      アイエニウェア・ソリューションズ株式会社
                         エンジニアリング統括部 課長

          Developers Summit 2010
アプリケーション開発者が陥りやすいDB開発の落とし穴


 導入・開発時等に実際にご相談のあった内容
  を元にRDBの技術等について解説します。
   ケーススタディ1
    システムが止まった
   ケーススタディ2
    プログラムのパフォーマンスが出ない
   ケーススタディ3
    Viewを使っているのだがパフォーマンスがでない
   ケーススタディ4
    マルチ(コア)CPUが有効に利用されてないようだ

           Developers Summit 2010
ケーススタディ1
システムが止まった

 スタンドアロンで稼働するPOSシステム
   数百台規模で展開
   1日あたり数台が特定の処理でフリーズ
   テスト環境で同じ処理を行っても再現しない




 すべての端末で詳細なログを取るように設定
 現象が発生した端末からログを回収


            Developers Summit 2010
ケーススタディ1
システムが止まった その原因は

 ある処理がトランザクション分離レベルをRead
  Committedに設定
   このシステムではRead Uncommittedが前提
   マルチスレッドプログラムでコネクション・プーリン
    グを使用
   後続の読み込み処理にRead Committedに設定さ
    れたスレッドが割り当てられた
   実行中のトランザクションによってブロック
   画面遷移が出来なくなり、Commitに辿りつけず操
    作不能に…
            Developers Summit 2010
ケーススタディ1
トランザクション分離レベルとは

 データベース上でトランザクション処理が複数同時に行われた
  ときに一貫性・正確性を4段階に定義したもの

                                      繰り返し不可能
       分離レベル       ダーティ・リード                       幻ロー
                                        読み出し

Read Uncommitted      あり                     あり   あり


Read Committed        なし                     あり   あり


Repeatable Read       なし                     なし   あり


Serializable          なし                     なし   なし

                    Developers Summit 2010
ケーススタディ1
システムが止まった その原因は

                                             処理2で更新中のデータ
                                             をSelectしようとしてブロ
Selectだけなのでトラン
ReadCommittedで処理
                                             ックされた
スタート
ザクションをかけずに処
理スタート


    処理3
    処理1             コネクション1
                                                SQL Anywhere
                                                 データベース
    処理2             コネクション2


                    コネクションプール

Read Uncommittedで
トランザクションスタート



                    Developers Summit 2010
ケーススタディ1
システムが止まった 問題点と解決策

 .NETの仕様
   プールされているコネクションは直前に使用された
    時の分離レベルを継承する


 解決策
   処理開始・終了時に必ず分離レベルの設定を行う


 トランザクション分離レベルを十分に理解しま
  しょう!

            Developers Summit 2010
ケーススタディ1
トランザクション分離レベルとは

 RDBMSによって実装の仕方が違う
   ANSI/ISO SQL標準
   Oracleではこのケースは発生しない
    読み取り一貫性
   SQL Server、SQL Anywhere等では新しい分離レ
    ベルを用意
    スナップショット分離レベル(読み取り一貫性の実現)
    トランザクション開始時にスナップショットを取るため、
     ディスクの空き容量に注意
    状況に応じて使い分けることを推奨


             Developers Summit 2010
ケーススタディ2
プログラムのパフォーマンスがでない

 月別の売上件数を表形式に表示する処理の
  パフォーマンスがでない
 切り分けをしてみるとDBに接続している時間
  が長い・・・SQLが遅いのでは?



 実行されたSQLの履歴をログとして収集・分析



           Developers Summit 2010
ケーススタディ2
プログラムのパフォーマンスがでない

 ログを分析してみると
   カラムごとに集計のSQLが実行されていた
        SELECT COUNT(*) AS CNT FROM tab01
         WHERE nen = ‘2003’ AND tsuki = 1
 12月                                                          15     14
 11月    12     15     14                        12     15     10     3
 10月    30     10     3                         30     10     3      6
 9月     20     3      6        12       15      20     3      6
 8月     5      1               30       10       5     1
 7月            12     15       14       3        6     10     15     20
 6月            30     10        3       1              8      10     16
 5月     12     15     14        6       15      14     1      15     14
 4月     30     10     3                 10       3     6      10     3
 3月     20     3      6        20       3        6            3      6
 2月     5      1                5       1
 1月     15     10     3         1
       2002   2003   2004     2005     2006    2007   2008   2009   2010
                            Developers Summit 2010
ケーススタディ2
プログラムのパフォーマンスがでない

 列単位に集計するように修正
   SELECT nen,tsuki,COUNT(*) AS CNT FROM tab01
    WHERE nen = 2003
    group by tsuki,nen
    order by tsuki,nen
 12月                                                          15     14
 11月    12     15     14                        12     15     10     3
 10月    30     10     3                         30     10     3      6
 9月     20     3      6        12       15      20     3      6
 8月     5      1               30       10       5     1
 7月            12     15       14       3        6     10     15     20
 6月            30     10        3       1              8      10     16
 5月     12     15     14        6       15      14     1      15     14
 4月     30     10     3                 10       3     6      10     3
 3月     20     3      6        20       3        6            3      6
 2月     5      1                5       1
 1月     15     10     3         1
       2002   2003   2004     2005     2006    2007   2008   2009   2010
                            Developers Summit 2010
ケーススタディ2
プログラムのパフォーマンスがでない

 全体を一度に集計するように修正
   SELECT nen,tsuki,COUNT(*) AS CNT FROM tab01
    group by nen,tsuki
    order by nen,tsuki

 12月                                                          15     14
 11月    12     15     14                        12     15     10     3
 10月    30     10     3                         30     10     3      6
 9月     20     3      6        12       15      20     3      6
 8月     5      1               30       10       5     1
 7月            12     15       14       3        6     10     15     20
 6月            30     10        3       1              8      10     16
 5月     12     15     14        6       15      14     1      15     14
 4月     30     10     3                 10       3     6      10     3
 3月     20     3      6        20       3        6            3      6
 2月     5      1                5       1
 1月     15     10     3         1
       2002   2003   2004     2005     2006    2007   2008   2009   2010
                            Developers Summit 2010
ケーススタディ2
プログラムのパフォーマンスがでない

 要求仕様を単純にSQLに置き換えるのは危険
   この例では12×9回のSQLが実行されていた
    一回あたりの実行時間が短くても回数が増えれば当然
     パフォーマンスは低下する
   修正後は、1回のSQL+結果セットからのフェッチ
   効率のよいSQLを検討する




           Developers Summit 2010
ケーススタディ3
Viewを使っているのだがパフォーマンスがでない

 Viewは非常に便利だが使い方によっては気づかず
  にパフォーマンスを低下させることがある
   単純にテーブルをJOINしているViewはそれほど問題にな
    らない(ベーステーブルへの適切なインデックスは必要)
   集合関数・集合演算子は注意が必要
      sum,avg,count,max,min等
      union,intersect,except等
   大量データを集約するようなViewはコストが掛かる




            Developers Summit 2010
ケーススタディ3
Viewを使っているのだがパフォーマンスがでない

 Viewを使ってパフォーマンスがでない簡単な例
   以下のようなViewを作成
     create view View_sum as
     select region ,sum(quantity) as qty from orders
     group by region
   以下のようなselect文を実行
     select region,qty from View_sum where region = ‘West’
   viewが評価された後にwhere条件で抽出されるため、
    orderテーブルは全件集約される




                       Developers Summit 2010
ケーススタディ3
Viewを使っているのだがパフォーマンスがでない

 Viewを使ってパフォーマンスがでない簡単な例
   Viewを使わないと…
    select region ,sum(quantity) as qty from orders
     where region = ‘West’
     group by region


   orderテーブルからwhere条件で抽出されたローだけが集
    約されるため、Viewを使った場合より高速




                     Developers Summit 2010
ケーススタディ3
Viewを使っているのだがパフォーマンスがでない

 マテリアライズド・ビューという解決方法もある
   実データを保持するのでパフォーマンスが良い
   集合関数・集合演算子を使用するようなViewと親和性が高
    い
   オプティマイザに自動的に使用を判断させることも可能
    SQL文を変更せずにパフォーマンスの向上が見込める
 注意点
   Refleshの管理が必要
   実データを保持するための領域が必要




            Developers Summit 2010
ケーススタディ3
  Viewを使っているのだがパフォーマンスがでない

    マテリアライズド・ビューのデモ
    約25万件の売り上げ明細データから特定月の担当者別・日別
     の売り上げ金額・数量の集計を求める

SELECT employees.surname, employees.givenname,          CREATE MATERIALIZED VIEW demo AS
   salesorders.orderdate,                                SELECT employees.surname, employees.givenname,
   SUM(products.unitprice *                                 salesorders.orderdate,
     salesorderitems.quantity) AS TotalSales,               SUM(products.unitprice *
   SUM(salesorderitems.quantity) AS NumberOfSales              salesorderitems.quantity) AS TotalSales,
FROM (((salesorders JOIN employees ON                       SUM(salesorderitems.quantity) AS NumberOfSales
    salesorders.salesrepresentative =                    FROM (((salesorders JOIN employees ON
    employees.employeeid) JOIN salesorderitems ON            salesorders.salesrepresentative =
    salesorders.id = salesorderitems.id) JOIN                employees.employeeid ) JOIN salesorderitems ON
    products ON products.id =                                salesorders.id = salesorderitems.id) JOIN
    salesorderitems.productid)                               products ON products.id =
WHERE YEAR(orderdate) = 2001 AND MONTH(orderdate) = 7        salesorderitems.productid)
GROUP BY employees.surname,                              GROUP BY employees.surname,
     employees.givenname, salesorders.orderdate;              employees.givenname,salesorders.orderdate;



                                          Developers Summit 2010
ケーススタディ4
マルチ(コア)CPUが有効利用されてないようだ

 CPUのマルチコア化に伴い、RDBMSもマルチCPU
  構成を有効に利用するようなアーキテクチャを実装し
  てきている
   クエリ間並列処理
     複数接続からのクエリ要求を別々のコアに分散実行
   クエリ内並列処理
     1つのクエリ内の処理を別々のコアで実行
     並列インデックススキャン・並列ソート等




               Developers Summit 2010
ケーススタディ4
マルチ(コア)CPUが有効利用されてないようだ

 負荷の高いSQLを複数投入してみたが、コアの1つし
  かCPU使用率が上がらない



 ディスクI/Oがボトルネックになっていることが考えら
  れます
   キャッシュサイズを増やす
   速度の速いディスクを採用する
   データベースの配置を複数の物理ディスクに分散
    する
            Developers Summit 2010
SQL Anywhere 製品紹介
SQL Anywhere の概要
         製品基本コンセプト

   省リソースで管理者不要なデータベースと分散環境の統合、既存システム
   との連携ソリューションを提供する包括的なパッケージ製品です
         省リソースで稼動                                    マルチCPU、64bit(X64)に対応                  容易なデータ移行


                    ハード投資を抑える
                                                                                       Windows XP   Windows サーバ
    ノートPCなどでも軽快に動作。                                                         規    容易な   Vista
    WMもサポート。                                     初    最小限の投資                模   規模拡張
                                                 期                          拡
        容易なインストール                                投    業務拡大への                張      Windows Mobile   Linux サーバ

                                                 資     迅速な対応                ・          データベースをファイルコピーの
                                                 ・                          デ
                    設定要員コスト削減                    運     既存資産の                ー
                                                                                       みで移行可能。使用していたデ
                                                                                       ータをそのまま移行できます。
                                                 用      有効活用                タ
    モジュールはCD-ROM1枚で。                             コ                          連            データ移行が容易
                                                                                         既存DBとのデータ同期
    複雑な設定なしで自動インストー                              ス
    ル可能
                                                 ト                          携
          管理の自動化                                 削                          が
                                                 減                          容   既存データ               既存データベース
                                                                            易   活用・連携
                      運用コスト削減
                                                        エンタープライズ
    クエリ自動学習機能や自動リカ
    バリ機能により、データベースメ                                                                    既存DB、ORACLEやSQL Server
                                                      中堅・中小企業システム                      IBM DB2などとデータ同期可能。
    ンテナンスの必要性を極力排除
                                                                                       既存データを活用できます。
                                           モバイル               パッケージ組み込み
22 – Copyright © 2010 iAnywhere Solutions K.K.
SQL Anywhereの概要
         ビジネス要件の拡張への対応

                                                   8U


 分散DB環境をデータ同期によりデータ統合
                                                                  データ同期を使い、モバイル
                                         Mobile Link              システムへと拡張




                                                 DBファイルのコピーでバックアップ、復
                                                 旧や移行可能
                                                 Windows Server OS(32bit/64bit),Linux
サーバエンジン                                          やWMにも対応                                   Linux

  既存PC等の低スペック(RAM256M)で
  も稼動
  自動チューニング/自動リカバリ                                                                                    BlackBerry
  テーブル/カラム、通信の暗号化                                                                          Windows
                                                                                             Mobile
   対応                                                                        Windows
                                                 スタンドアロン エンジン
                                                                                         モバイル
23 – Copyright © 2010 iAnywhere Solutions K.K.
SQL Anywhereの概要
         ビジネス要件の拡張への対応


    基本コンセプトに加え、データ量増大やユーザ数増加などビジネス要件
    の拡張に伴い、さらに処理効率を向上させる機能を実装

   パフォーマンス                                                      開発・運用
   マテリアライズド・ビュー                                               Visual Studio への統合
                                                          規
   スナップショット・                               初    最小限の投資   模    充実した統合管理・分析Tool
     アイソレーション                               期             拡
                                            投    業務拡大への        配布インストーラ作成Tool
                                                          張
   パラレル・クエリ                                資     迅速な対応   ・
                                            ・             デ   など
                                            運     既存資産の   ー
  など                                        用      有効活用   タ
データ管理                                       コ
                                            ス             連     データ同期・統合
                                            ト             携
   高可用性オプション                               削             が    容易なデータ同期設定
                                            減             容
   柔軟なデータ暗号化                                             易    Text等その他データソース
  など                                                            同期用API
                                                               メッセージング、Webサービス
                                                                とのインターフェイス
24 – Copyright © 2010 iAnywhere Solutions K.K.
                                                              など
その他 各種情報


             – アイエニウェア・ソリューションズ株式会社ホームページ
               http://www.ianywhere.jp
                     製品情報
                      http://www.ianywhere.jp/prd/index.html
                     弊社ソリューション情報
                      http://www.ianywhere.jp/sol/index.html




25 – Copyright © 2010 iAnywhere Solutions K.K.
その他 各種情報


         ・アイエニウェア・ソリューションズ デベロッパー・コミュニティ
             http://www.ianywhere.jp/developers/index.html


                                                 - SQL Anywhere Developer Edition
                                                   SQL Anywhere の開発者バージョンが
                                                   ダウンロードできます。
             開発者バージョンは、ユーザ登録のみで、開発用途限定で日数制限無く製品版と
             同様の機能をご利用いただけます。
             - 開発者向けニュースグループ
             弊社製品をご利用頂く中で、製品に関するご質問についてはニュースグループを
             ご活用ください。弊社エンジニアも時間の許す限り、支援いたしております。




26 – Copyright © 2010 iAnywhere Solutions K.K.
27 – Copyright © 2010 iAnywhere Solutions K.K.

More Related Content

Similar to RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~

Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオンAzure のポータル画面で、AI フレーバな BOT の作成ハンズオン
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
Yasuaki Matsuda
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
徹 上野山
 
【Techbuzz】titanium資料
【Techbuzz】titanium資料【Techbuzz】titanium資料
【Techbuzz】titanium資料
洋平 前田
 
Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018
真吾 吉田
 
楽天プロジェクトX:基幹DB移設 編
楽天プロジェクトX:基幹DB移設 編楽天プロジェクトX:基幹DB移設 編
楽天プロジェクトX:基幹DB移設 編
Rakuten Group, Inc.
 
Qlik TechFest C-8 パフォーマンス問題との闘い方
Qlik TechFest C-8 パフォーマンス問題との闘い方 Qlik TechFest C-8 パフォーマンス問題との闘い方
Qlik TechFest C-8 パフォーマンス問題との闘い方
QlikPresalesJapan
 
Japan r.3
Japan r.3Japan r.3
Japan r.3
Hiroki Matsui
 
Agile Estimating And Planning
Agile Estimating And PlanningAgile Estimating And Planning
Agile Estimating And Planning
Eiwa System Management, Inc.
 
"Ordinary" System Development
"Ordinary" System Development"Ordinary" System Development
"Ordinary" System DevelopmentShintaro Kakutani
 
20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup
akitsukada
 
10大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon201510大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon2015
NTT DATA OSS Professional Services
 
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)Insight Technology, Inc.
 
201023 jobscheduler os_cfall
201023 jobscheduler os_cfall201023 jobscheduler os_cfall
201023 jobscheduler os_cfall
OSSラボ株式会社
 
データベースを使おう
データベースを使おうデータベースを使おう
データベースを使おう
Shuhei Iitsuka
 
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
Keizo Tatsumi
 
【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用
【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用
【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用
智治 長沢
 
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
decode2016
 

Similar to RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~ (20)

Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオンAzure のポータル画面で、AI フレーバな BOT の作成ハンズオン
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
 
【Techbuzz】titanium資料
【Techbuzz】titanium資料【Techbuzz】titanium資料
【Techbuzz】titanium資料
 
Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018
 
楽天プロジェクトX:基幹DB移設 編
楽天プロジェクトX:基幹DB移設 編楽天プロジェクトX:基幹DB移設 編
楽天プロジェクトX:基幹DB移設 編
 
WBS
WBSWBS
WBS
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 
Qlik TechFest C-8 パフォーマンス問題との闘い方
Qlik TechFest C-8 パフォーマンス問題との闘い方 Qlik TechFest C-8 パフォーマンス問題との闘い方
Qlik TechFest C-8 パフォーマンス問題との闘い方
 
Japan r.3
Japan r.3Japan r.3
Japan r.3
 
Agile Estimating And Planning
Agile Estimating And PlanningAgile Estimating And Planning
Agile Estimating And Planning
 
"Ordinary" System Development
"Ordinary" System Development"Ordinary" System Development
"Ordinary" System Development
 
20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup
 
10大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon201510大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon2015
 
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
 
201023 jobscheduler os_cfall
201023 jobscheduler os_cfall201023 jobscheduler os_cfall
201023 jobscheduler os_cfall
 
データベースを使おう
データベースを使おうデータベースを使おう
データベースを使おう
 
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
 
【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用
【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用
【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用
 
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
 

RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~

  • 1. RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~ 18-E-6 磯辺 信雄 アイエニウェア・ソリューションズ株式会社 エンジニアリング統括部 課長 Developers Summit 2010
  • 2. アプリケーション開発者が陥りやすいDB開発の落とし穴  導入・開発時等に実際にご相談のあった内容 を元にRDBの技術等について解説します。  ケーススタディ1  システムが止まった  ケーススタディ2  プログラムのパフォーマンスが出ない  ケーススタディ3  Viewを使っているのだがパフォーマンスがでない  ケーススタディ4  マルチ(コア)CPUが有効に利用されてないようだ Developers Summit 2010
  • 3. ケーススタディ1 システムが止まった  スタンドアロンで稼働するPOSシステム  数百台規模で展開  1日あたり数台が特定の処理でフリーズ  テスト環境で同じ処理を行っても再現しない  すべての端末で詳細なログを取るように設定  現象が発生した端末からログを回収 Developers Summit 2010
  • 4. ケーススタディ1 システムが止まった その原因は  ある処理がトランザクション分離レベルをRead Committedに設定  このシステムではRead Uncommittedが前提  マルチスレッドプログラムでコネクション・プーリン グを使用  後続の読み込み処理にRead Committedに設定さ れたスレッドが割り当てられた  実行中のトランザクションによってブロック  画面遷移が出来なくなり、Commitに辿りつけず操 作不能に… Developers Summit 2010
  • 5. ケーススタディ1 トランザクション分離レベルとは  データベース上でトランザクション処理が複数同時に行われた ときに一貫性・正確性を4段階に定義したもの 繰り返し不可能 分離レベル ダーティ・リード 幻ロー 読み出し Read Uncommitted あり あり あり Read Committed なし あり あり Repeatable Read なし なし あり Serializable なし なし なし Developers Summit 2010
  • 6. ケーススタディ1 システムが止まった その原因は 処理2で更新中のデータ をSelectしようとしてブロ Selectだけなのでトラン ReadCommittedで処理 ックされた スタート ザクションをかけずに処 理スタート 処理3 処理1 コネクション1 SQL Anywhere データベース 処理2 コネクション2 コネクションプール Read Uncommittedで トランザクションスタート Developers Summit 2010
  • 7. ケーススタディ1 システムが止まった 問題点と解決策  .NETの仕様  プールされているコネクションは直前に使用された 時の分離レベルを継承する  解決策  処理開始・終了時に必ず分離レベルの設定を行う  トランザクション分離レベルを十分に理解しま しょう! Developers Summit 2010
  • 8. ケーススタディ1 トランザクション分離レベルとは  RDBMSによって実装の仕方が違う  ANSI/ISO SQL標準  Oracleではこのケースは発生しない  読み取り一貫性  SQL Server、SQL Anywhere等では新しい分離レ ベルを用意  スナップショット分離レベル(読み取り一貫性の実現)  トランザクション開始時にスナップショットを取るため、 ディスクの空き容量に注意  状況に応じて使い分けることを推奨 Developers Summit 2010
  • 9. ケーススタディ2 プログラムのパフォーマンスがでない  月別の売上件数を表形式に表示する処理の パフォーマンスがでない  切り分けをしてみるとDBに接続している時間 が長い・・・SQLが遅いのでは?  実行されたSQLの履歴をログとして収集・分析 Developers Summit 2010
  • 10. ケーススタディ2 プログラムのパフォーマンスがでない  ログを分析してみると  カラムごとに集計のSQLが実行されていた  SELECT COUNT(*) AS CNT FROM tab01 WHERE nen = ‘2003’ AND tsuki = 1 12月 15 14 11月 12 15 14 12 15 10 3 10月 30 10 3 30 10 3 6 9月 20 3 6 12 15 20 3 6 8月 5 1 30 10 5 1 7月 12 15 14 3 6 10 15 20 6月 30 10 3 1 8 10 16 5月 12 15 14 6 15 14 1 15 14 4月 30 10 3 10 3 6 10 3 3月 20 3 6 20 3 6 3 6 2月 5 1 5 1 1月 15 10 3 1 2002 2003 2004 2005 2006 2007 2008 2009 2010 Developers Summit 2010
  • 11. ケーススタディ2 プログラムのパフォーマンスがでない  列単位に集計するように修正  SELECT nen,tsuki,COUNT(*) AS CNT FROM tab01 WHERE nen = 2003 group by tsuki,nen order by tsuki,nen 12月 15 14 11月 12 15 14 12 15 10 3 10月 30 10 3 30 10 3 6 9月 20 3 6 12 15 20 3 6 8月 5 1 30 10 5 1 7月 12 15 14 3 6 10 15 20 6月 30 10 3 1 8 10 16 5月 12 15 14 6 15 14 1 15 14 4月 30 10 3 10 3 6 10 3 3月 20 3 6 20 3 6 3 6 2月 5 1 5 1 1月 15 10 3 1 2002 2003 2004 2005 2006 2007 2008 2009 2010 Developers Summit 2010
  • 12. ケーススタディ2 プログラムのパフォーマンスがでない  全体を一度に集計するように修正  SELECT nen,tsuki,COUNT(*) AS CNT FROM tab01 group by nen,tsuki order by nen,tsuki 12月 15 14 11月 12 15 14 12 15 10 3 10月 30 10 3 30 10 3 6 9月 20 3 6 12 15 20 3 6 8月 5 1 30 10 5 1 7月 12 15 14 3 6 10 15 20 6月 30 10 3 1 8 10 16 5月 12 15 14 6 15 14 1 15 14 4月 30 10 3 10 3 6 10 3 3月 20 3 6 20 3 6 3 6 2月 5 1 5 1 1月 15 10 3 1 2002 2003 2004 2005 2006 2007 2008 2009 2010 Developers Summit 2010
  • 13. ケーススタディ2 プログラムのパフォーマンスがでない  要求仕様を単純にSQLに置き換えるのは危険  この例では12×9回のSQLが実行されていた  一回あたりの実行時間が短くても回数が増えれば当然 パフォーマンスは低下する  修正後は、1回のSQL+結果セットからのフェッチ  効率のよいSQLを検討する Developers Summit 2010
  • 14. ケーススタディ3 Viewを使っているのだがパフォーマンスがでない  Viewは非常に便利だが使い方によっては気づかず にパフォーマンスを低下させることがある  単純にテーブルをJOINしているViewはそれほど問題にな らない(ベーステーブルへの適切なインデックスは必要)  集合関数・集合演算子は注意が必要  sum,avg,count,max,min等  union,intersect,except等  大量データを集約するようなViewはコストが掛かる Developers Summit 2010
  • 15. ケーススタディ3 Viewを使っているのだがパフォーマンスがでない  Viewを使ってパフォーマンスがでない簡単な例  以下のようなViewを作成 create view View_sum as select region ,sum(quantity) as qty from orders group by region  以下のようなselect文を実行 select region,qty from View_sum where region = ‘West’  viewが評価された後にwhere条件で抽出されるため、 orderテーブルは全件集約される Developers Summit 2010
  • 16. ケーススタディ3 Viewを使っているのだがパフォーマンスがでない  Viewを使ってパフォーマンスがでない簡単な例  Viewを使わないと… select region ,sum(quantity) as qty from orders where region = ‘West’ group by region  orderテーブルからwhere条件で抽出されたローだけが集 約されるため、Viewを使った場合より高速 Developers Summit 2010
  • 17. ケーススタディ3 Viewを使っているのだがパフォーマンスがでない  マテリアライズド・ビューという解決方法もある  実データを保持するのでパフォーマンスが良い  集合関数・集合演算子を使用するようなViewと親和性が高 い  オプティマイザに自動的に使用を判断させることも可能  SQL文を変更せずにパフォーマンスの向上が見込める  注意点  Refleshの管理が必要  実データを保持するための領域が必要 Developers Summit 2010
  • 18. ケーススタディ3 Viewを使っているのだがパフォーマンスがでない  マテリアライズド・ビューのデモ  約25万件の売り上げ明細データから特定月の担当者別・日別 の売り上げ金額・数量の集計を求める SELECT employees.surname, employees.givenname, CREATE MATERIALIZED VIEW demo AS salesorders.orderdate, SELECT employees.surname, employees.givenname, SUM(products.unitprice * salesorders.orderdate, salesorderitems.quantity) AS TotalSales, SUM(products.unitprice * SUM(salesorderitems.quantity) AS NumberOfSales salesorderitems.quantity) AS TotalSales, FROM (((salesorders JOIN employees ON SUM(salesorderitems.quantity) AS NumberOfSales salesorders.salesrepresentative = FROM (((salesorders JOIN employees ON employees.employeeid) JOIN salesorderitems ON salesorders.salesrepresentative = salesorders.id = salesorderitems.id) JOIN employees.employeeid ) JOIN salesorderitems ON products ON products.id = salesorders.id = salesorderitems.id) JOIN salesorderitems.productid) products ON products.id = WHERE YEAR(orderdate) = 2001 AND MONTH(orderdate) = 7 salesorderitems.productid) GROUP BY employees.surname, GROUP BY employees.surname, employees.givenname, salesorders.orderdate; employees.givenname,salesorders.orderdate; Developers Summit 2010
  • 19. ケーススタディ4 マルチ(コア)CPUが有効利用されてないようだ  CPUのマルチコア化に伴い、RDBMSもマルチCPU 構成を有効に利用するようなアーキテクチャを実装し てきている  クエリ間並列処理  複数接続からのクエリ要求を別々のコアに分散実行  クエリ内並列処理  1つのクエリ内の処理を別々のコアで実行  並列インデックススキャン・並列ソート等 Developers Summit 2010
  • 20. ケーススタディ4 マルチ(コア)CPUが有効利用されてないようだ  負荷の高いSQLを複数投入してみたが、コアの1つし かCPU使用率が上がらない  ディスクI/Oがボトルネックになっていることが考えら れます  キャッシュサイズを増やす  速度の速いディスクを採用する  データベースの配置を複数の物理ディスクに分散 する Developers Summit 2010
  • 22. SQL Anywhere の概要 製品基本コンセプト 省リソースで管理者不要なデータベースと分散環境の統合、既存システム との連携ソリューションを提供する包括的なパッケージ製品です 省リソースで稼動 マルチCPU、64bit(X64)に対応 容易なデータ移行 ハード投資を抑える Windows XP Windows サーバ ノートPCなどでも軽快に動作。 規 容易な Vista WMもサポート。 初 最小限の投資 模 規模拡張 期 拡 容易なインストール 投 業務拡大への 張 Windows Mobile Linux サーバ 資 迅速な対応 ・ データベースをファイルコピーの ・ デ 設定要員コスト削減 運 既存資産の ー みで移行可能。使用していたデ ータをそのまま移行できます。 用 有効活用 タ モジュールはCD-ROM1枚で。 コ 連 データ移行が容易 既存DBとのデータ同期 複雑な設定なしで自動インストー ス ル可能 ト 携 管理の自動化 削 が 減 容 既存データ 既存データベース 易 活用・連携 運用コスト削減 エンタープライズ クエリ自動学習機能や自動リカ バリ機能により、データベースメ 既存DB、ORACLEやSQL Server 中堅・中小企業システム IBM DB2などとデータ同期可能。 ンテナンスの必要性を極力排除 既存データを活用できます。 モバイル パッケージ組み込み 22 – Copyright © 2010 iAnywhere Solutions K.K.
  • 23. SQL Anywhereの概要 ビジネス要件の拡張への対応 8U 分散DB環境をデータ同期によりデータ統合 データ同期を使い、モバイル Mobile Link システムへと拡張 DBファイルのコピーでバックアップ、復 旧や移行可能 Windows Server OS(32bit/64bit),Linux サーバエンジン やWMにも対応 Linux 既存PC等の低スペック(RAM256M)で も稼動 自動チューニング/自動リカバリ BlackBerry テーブル/カラム、通信の暗号化 Windows Mobile 対応 Windows スタンドアロン エンジン モバイル 23 – Copyright © 2010 iAnywhere Solutions K.K.
  • 24. SQL Anywhereの概要 ビジネス要件の拡張への対応 基本コンセプトに加え、データ量増大やユーザ数増加などビジネス要件 の拡張に伴い、さらに処理効率を向上させる機能を実装 パフォーマンス 開発・運用  マテリアライズド・ビュー  Visual Studio への統合 規  スナップショット・ 初 最小限の投資 模  充実した統合管理・分析Tool アイソレーション 期 拡 投 業務拡大への  配布インストーラ作成Tool 張  パラレル・クエリ 資 迅速な対応 ・ ・ デ など 運 既存資産の ー など 用 有効活用 タ データ管理 コ ス 連 データ同期・統合 ト 携  高可用性オプション 削 が  容易なデータ同期設定 減 容  柔軟なデータ暗号化 易  Text等その他データソース など 同期用API  メッセージング、Webサービス とのインターフェイス 24 – Copyright © 2010 iAnywhere Solutions K.K. など
  • 25. その他 各種情報 – アイエニウェア・ソリューションズ株式会社ホームページ http://www.ianywhere.jp  製品情報 http://www.ianywhere.jp/prd/index.html  弊社ソリューション情報 http://www.ianywhere.jp/sol/index.html 25 – Copyright © 2010 iAnywhere Solutions K.K.
  • 26. その他 各種情報 ・アイエニウェア・ソリューションズ デベロッパー・コミュニティ http://www.ianywhere.jp/developers/index.html - SQL Anywhere Developer Edition SQL Anywhere の開発者バージョンが ダウンロードできます。 開発者バージョンは、ユーザ登録のみで、開発用途限定で日数制限無く製品版と 同様の機能をご利用いただけます。 - 開発者向けニュースグループ 弊社製品をご利用頂く中で、製品に関するご質問についてはニュースグループを ご活用ください。弊社エンジニアも時間の許す限り、支援いたしております。 26 – Copyright © 2010 iAnywhere Solutions K.K.
  • 27. 27 – Copyright © 2010 iAnywhere Solutions K.K.