SlideShare a Scribd company logo
Oracle Unconference

                                 シンプル・イズ・ベスト
                                 シンプル イズ ベスト
                               ~デフォルト機能を使い倒せ!~
                                デフォルト機能を使い倒せ!




                                                     株式会社 コーソル   1
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Oracle Unconference


                   Ⅰ. 松下雅@コーソルって誰?
                   Ⅱ. システムの構成を考えよう
                   Ⅲ. 極力、シンプルなコードを
                   Ⅲ 極力 シンプルな   ドを
                   Ⅳ.
                   Ⅳ デフォルトの設定って?
                   Ⅴ. Question & Answer
                    .


                                                     2
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Oracle Unconference


                   Ⅰ. 松下雅@コーソルって誰?
                   Ⅱ. システムの構成を考えよう
                   Ⅲ. 極力、シンプルなコードを
                   Ⅲ 極力 シンプルな   ドを
                   Ⅳ.
                   Ⅳ デフォルトの設定って?
                   Ⅴ. Question & Answer
                    .


                                                     3
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅰ.松下雅@コーソルって誰?
           株式会社コーソル所属の技術屋
                    Oracle Supportとインフラが強み
                    Oracle Master所有率 96%
                    社員79名(2009/1/20現在)

           色々やらせていただいてます
                    @ITへの寄稿
                    書籍執筆
                       執


                                                     4
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Oracle Unconference


                   Ⅰ. 松下雅@コーソルって誰?
                   Ⅱ. システムの構成を考えよう
                   Ⅲ. 極力、シンプルなコードを
                   Ⅲ 極力 シンプルな   ドを
                   Ⅳ.
                   Ⅳ デフォルトの設定って?
                   Ⅴ. Question & Answer
                    .


                                                     5
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅱ. システムの構成を考えよう

        ここで言いたいことは
        ここで言いたいことは・・・

                                                     さん       しょう
                                        ち                 ち

                                 地産地消
        ※ 地域生産地域消費(ちいきせいさん・ちいきしょうひ)
          の略語。地域で生産された農産物や水産物をその地域
          で消費すること。by Wikipedia

                                                                    6
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅱ. システムの構成を考えよう
           極々一般的な構成




                   DB Serv.                          AP Serv.
                                                                User
                                                                Use
      データを貯めて                                        アプリを実行
       おくサ
       おくサーバ                                         するサ
                                                     するサーバ
                                                                       7
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅱ. システムの構成を考えよう
           この構成のリソースは・・・?


            DB S
               Serv.                                           AP S
                                                                  Serv.
                                                     Network




                                                                          8
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅱ. システムの構成を考えよう
           100万件のテーブルから10件を検索する場合
                    仮に、AP Serv.でレコードを絞ろうとしたら・・・?

                                    DB Serv.-AP Serv.間に、
                                    100万件のデータが流れる




                              DB Serv.               AP Serv.
                                                                9
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅱ. システムの構成を考えよう
           100万件のテーブルから10件を検索する場合
                    では、DB Serv.でレコードを絞ったら・・・?

                                            DB Serv.-AP Serv.間に
                                            10件のデ タが流れる
                                            10件のデータが流れる




                              DB Serv.                      AP Serv.
                                                                       10
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅱ. システムの構成を考えよう
           これは、SQLの ≪選択≫≪射影≫≪結合≫
           全てにあてはまります。

         ≪選択≫ → 抽出条件は適切ですか?
                                            句、      句
                                       WHERE句、HAVING句
         ≪射影≫ → 必要なカラムに絞ったSQLですか?
                                       SELECT * → AP S    で絞 ていませんか?
                                                     Serv.で絞っていませんか?
         ≪結合≫ → 発行している複数のSQL文、
                                       まとめることはできませんか?


                                                                       11
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅱ. システムの構成を考えよう
                         アプリケーションを実行するサーバは AP Serv.
                         に間違いありません。が、そこで使用(表示)す
                         に間違いありません が そこで使用(表示)す
                         るデータの抽出は、DB Serv. で絞りこむと大分
                         エコになります。




                              DB Serv.               AP Serv.
                                                                12
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Oracle Unconference


                   Ⅰ. 松下雅@コーソルって誰?
                   Ⅱ. システムの構成を考えよう
                   Ⅲ. 極力、シンプルなコードを
                   Ⅲ 極力 シンプルな   ドを
                   Ⅳ.
                   Ⅳ デフォルトの設定って?
                   Ⅴ. Question & Answer
                    .


                                                     13
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを

        ここで言いたいことは
        ここで言いたいことは・・・

                                                     こ       しん
                                      おん                 ち

                                 温故知新
        ※ 故きを温ねて新しきを知れば、以って師と為るべし。
          by 語源由来辞典


                                                                  14
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを



                   cat <ファイル名> | sort | uniq
                                           q

                          イル名
                   cat <ファイル名> | sort -u

                   sort -u <ファイル名>

                                                     15
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを
                  パイプ、コマンドの動き


                 cat <ファイル名> |                       sort -u
                                                           u


                               プロセスA                  プロセスB


                                    プロセスAとプロセスBは並行稼動

                                                               16
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを



           find . -maxdepth 1 -mtime +200 –exec rm {} ¥;
                   maxdepth mtime          exec


           find . -maxdepth 1 -mtime +200 | xargs rm


           find . -maxdepth 1 -mtime +200 –exec rm {} +


                                                          17
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを
                  find -exec、xargsの動き

                                                     見つけたファイルに対し、1行ずつ
                 find -exec ¥;                       実行。複数回、同一のコマンドが実
                                                     実行 複数回 同一のコマンドが実
                                                     行される。

                                                     rm
                                                      rm
                                                       rm
                                                        rm
                                                         rm
                                                           rm
                                                            rm
                                                              rm
                                                               rm
                                                                    18
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを
                  find -exec、xargsの動き

                                                     標準入力で渡されたリテラルを、
                 xargs
                                                     引数の限界(ARG_MAX)まで1つの
                                                     引数の限界(ARG MAX)まで1つの
                 find -exec +
                                                     オプションとして実行。同一のコマンド
                                                     が、まとめて実行される。

                                                     rm


                                                     rm


                                                                     19
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを
               補足
         『find -exec +』 は、語尾が 『{} +』 で終わる必要があります。
         (『ls』 や 『rm』 では使えるが、『mv』 や 『cp』 では使えない)
                ○ find . -maxdepth 1 -mtime +200 -exec rm {} +
                × find . -maxdepth 1 -mtime +200 -exec mv {} backup +
                               p                                  p



         この先は、各コマンド(環境)依存です。※汎用的には厳しい。
         (『mv』 や 『cp』 では、--target-directoryでクリア)
       ○ find . -maxdepth 1 -mtime +200 –exec mv --target-directory=backup {} +
                 maxdepth mtime          exec      target directory backup
       ※BSD           find . -maxdepth 1 -mtime +200 | xargs -J mv {} backup


                                                                               20
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを
    set timing on
    declare
        cursor c1 i select id,age from tbl_daityo;
                  is l t id       f    tbl d it
                                                                     update tbl_daityo set kouza=kouza + 20000
        r1 tbl_daityo%rowtype;
                                                                                where age > 64 or age < 19;
    begin
      g
                                                                     update tbl_daityo set kouza=kouza + 12000
        for r1 in c1 loop
                                                                                where age > 18 and age < 65;
          if r1.age > 64 or r1.age < 19 then
            update tbl_daityo set kouza = kouza + 20000
            where id = r1.id;
          else
            update tbl_daityo set kouza = kouza + 12000
            where id = r1.id;
          end if
              if;
                                                     update tbl_daityo
        end loop;
                                                      set kouza=(case when age > 64 or age < 19 then kouza + 20000
        commit;
                                                                         else kouza + 12000
    end;                                                         end);                                         21
    /
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを
                  PL/SQLエンジン、SQLエンジン
  declare
    cursor c1 is select id,age from tbl_daityo;
    r1 tbl_daityo%rowtype;
                                                                           SQL
  begin

                                                                          エンジン
    f
    for r1 in c1 loop
                    p
       if r1.age > 64 or r1.age < 19 then
          update tbl_daityo set kouza = kouza + 20000 where id = r1.id;
       else
        ls
                                                                          PL/SQL
          update tbl_daityo set kouza = kouza + 12000 where id = r1.id;
                                                                          エンジン
       end if;
    end loop;
    commit;
  end;

                                                                              22
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを
                  チューニング案件でよく聞く言葉
                   「SQL を見せてください」
                   「インデックスは有効ですか?」
                   「実行計画に問題はないですか?」
                   「アナライズは最新ですか?」
                   declare
                     cursor c1 is select id,age from tbl_daityo;
                     r1 tbl_daityo%rowtype;
                   begin
                     for r1 in c1 loop
                       if r1.age > 64 or r1.age < 19 then
                                                                                           これ
                           update tbl daityo set kouza = kouza + 20000 where id = r1 id;
                                  tbl_daityo                                      r1.id;
                       else
                           update tbl_daityo set kouza = kouza + 12000 where id = r1.id;
                       end if;
                     end loop;
                     commit;
                                                                                                23
                   end;
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅲ. 極力、シンプルなコードを
                  是非、これも聞いて欲しい
                  「SQL は、どこからKickされますか?」
                  「トランザクション・フローを教えてください」
                  「トランザクション・フロ を教えてください」
                  「詳細設計書見せてください」                       ※ やりすぎか・・・


                                                     ※ 8.1.6 以降 SQL-92
                                                                SQL 92
                        CASE
                                                     ※ 9i 以降
                        MERGE                                  SQL:2003
                                                     ※ 9i 以降       l 独自
                        Multi Table Insert
                          l i bl                        i      Oracle独自
                  ※ Bugにだけ、ご注意ください。。。
                      g
                                                                          24
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Oracle Unconference


                   Ⅰ. 松下雅@コーソルって誰?
                   Ⅱ. システムの構成を考えよう
                   Ⅲ. 極力、シンプルなコードを
                   Ⅲ 極力 シンプルな   ドを
                   Ⅳ.
                   Ⅳ デフォルトの設定って?
                   Ⅴ. Question & Answer
                    .


                                                     25
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅳ. デフォルトの設定って?




         インスタンス → memory_target ※11g 以降
                                      降
                                                                  ※10g 以降
                                                     sga_target
                                                     sga target
         データベース → AUTOEXTEND




                                                                       26
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Oracle Unconference


                   Ⅰ. 松下雅@コーソルって誰?
                   Ⅱ. システムの構成を考えよう
                   Ⅲ. 極力、シンプルなコードを
                   Ⅲ 極力 シンプルな   ドを
                   Ⅳ.
                   Ⅳ デフォルトの設定って?
                   Ⅴ. Question & Answer
                    .


                                                     27
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
Ⅴ 全体を通して




                                Question
                                                     &

                                      Answer
                                                         28
Copyright (C) 2009 CO-Sol Inc. All Rights Reserved

More Related Content

Oracle Unconference 松下 4/22

  • 1. Oracle Unconference シンプル・イズ・ベスト シンプル イズ ベスト ~デフォルト機能を使い倒せ!~ デフォルト機能を使い倒せ! 株式会社 コーソル 1 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 2. Oracle Unconference Ⅰ. 松下雅@コーソルって誰? Ⅱ. システムの構成を考えよう Ⅲ. 極力、シンプルなコードを Ⅲ 極力 シンプルな ドを Ⅳ. Ⅳ デフォルトの設定って? Ⅴ. Question & Answer . 2 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 3. Oracle Unconference Ⅰ. 松下雅@コーソルって誰? Ⅱ. システムの構成を考えよう Ⅲ. 極力、シンプルなコードを Ⅲ 極力 シンプルな ドを Ⅳ. Ⅳ デフォルトの設定って? Ⅴ. Question & Answer . 3 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 4. Ⅰ.松下雅@コーソルって誰? 株式会社コーソル所属の技術屋 Oracle Supportとインフラが強み Oracle Master所有率 96% 社員79名(2009/1/20現在) 色々やらせていただいてます @ITへの寄稿 書籍執筆 執 4 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 5. Oracle Unconference Ⅰ. 松下雅@コーソルって誰? Ⅱ. システムの構成を考えよう Ⅲ. 極力、シンプルなコードを Ⅲ 極力 シンプルな ドを Ⅳ. Ⅳ デフォルトの設定って? Ⅴ. Question & Answer . 5 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 6. Ⅱ. システムの構成を考えよう ここで言いたいことは ここで言いたいことは・・・ さん しょう ち ち 地産地消 ※ 地域生産地域消費(ちいきせいさん・ちいきしょうひ) の略語。地域で生産された農産物や水産物をその地域 で消費すること。by Wikipedia 6 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 7. Ⅱ. システムの構成を考えよう 極々一般的な構成 DB Serv. AP Serv. User Use データを貯めて アプリを実行 おくサ おくサーバ するサ するサーバ 7 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 8. Ⅱ. システムの構成を考えよう この構成のリソースは・・・? DB S Serv. AP S Serv. Network 8 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 9. Ⅱ. システムの構成を考えよう 100万件のテーブルから10件を検索する場合 仮に、AP Serv.でレコードを絞ろうとしたら・・・? DB Serv.-AP Serv.間に、 100万件のデータが流れる DB Serv. AP Serv. 9 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 10. Ⅱ. システムの構成を考えよう 100万件のテーブルから10件を検索する場合 では、DB Serv.でレコードを絞ったら・・・? DB Serv.-AP Serv.間に 10件のデ タが流れる 10件のデータが流れる DB Serv. AP Serv. 10 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 11. Ⅱ. システムの構成を考えよう これは、SQLの ≪選択≫≪射影≫≪結合≫ 全てにあてはまります。 ≪選択≫ → 抽出条件は適切ですか? 句、 句 WHERE句、HAVING句 ≪射影≫ → 必要なカラムに絞ったSQLですか? SELECT * → AP S で絞 ていませんか? Serv.で絞っていませんか? ≪結合≫ → 発行している複数のSQL文、 まとめることはできませんか? 11 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 12. Ⅱ. システムの構成を考えよう アプリケーションを実行するサーバは AP Serv. に間違いありません。が、そこで使用(表示)す に間違いありません が そこで使用(表示)す るデータの抽出は、DB Serv. で絞りこむと大分 エコになります。 DB Serv. AP Serv. 12 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 13. Oracle Unconference Ⅰ. 松下雅@コーソルって誰? Ⅱ. システムの構成を考えよう Ⅲ. 極力、シンプルなコードを Ⅲ 極力 シンプルな ドを Ⅳ. Ⅳ デフォルトの設定って? Ⅴ. Question & Answer . 13 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 14. Ⅲ. 極力、シンプルなコードを ここで言いたいことは ここで言いたいことは・・・ こ しん おん ち 温故知新 ※ 故き��温ねて新しきを知れば、以って師と為るべし。 by 語源由来辞典 14 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 15. Ⅲ. 極力、シンプルなコードを cat <ファイル名> | sort | uniq q イル名 cat <ファイル名> | sort -u sort -u <ファイル名> 15 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 16. Ⅲ. 極力、シンプルなコードを パイプ、コマンドの動き cat <ファイル名> | sort -u u プロセスA プロセスB プロセスAとプロセスBは並行稼動 16 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 17. Ⅲ. 極力、シンプルなコードを find . -maxdepth 1 -mtime +200 –exec rm {} ¥; maxdepth mtime exec find . -maxdepth 1 -mtime +200 | xargs rm find . -maxdepth 1 -mtime +200 –exec rm {} + 17 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 18. Ⅲ. 極力、シンプルなコードを find -exec、xargsの動き 見つけたファイルに対し、1行ずつ find -exec ¥; 実行。複数回、同一のコマンドが実 実行 複数回 同一のコマンドが実 行される。 rm rm rm rm rm rm rm rm rm 18 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 19. Ⅲ. 極力、シンプルなコードを find -exec、xargsの動き 標準入力で渡されたリテラルを、 xargs 引数の限界(ARG_MAX)まで1つの 引数の限界(ARG MAX)まで1つの find -exec + オプションとして実行。同一のコマンド が、まとめて実行される。 rm rm 19 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 20. Ⅲ. 極力、シンプルなコードを 補足 『find -exec +』 は、語尾が 『{} +』 で終わる必要があります。 (『ls』 や 『rm』 では使えるが、『mv』 や 『cp』 では使えない) ○ find . -maxdepth 1 -mtime +200 -exec rm {} + × find . -maxdepth 1 -mtime +200 -exec mv {} backup + p p この先は、各コマンド(環境)依存です。※汎用的には厳しい。 (『mv』 や 『cp』 では、--target-directoryでクリア) ○ find . -maxdepth 1 -mtime +200 –exec mv --target-directory=backup {} + maxdepth mtime exec target directory backup ※BSD find . -maxdepth 1 -mtime +200 | xargs -J mv {} backup 20 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 21. Ⅲ. 極力、シンプルなコードを set timing on declare cursor c1 i select id,age from tbl_daityo; is l t id f tbl d it update tbl_daityo set kouza=kouza + 20000 r1 tbl_daityo%rowtype; where age > 64 or age < 19; begin g update tbl_daityo set kouza=kouza + 12000 for r1 in c1 loop where age > 18 and age < 65; if r1.age > 64 or r1.age < 19 then update tbl_daityo set kouza = kouza + 20000 where id = r1.id; else update tbl_daityo set kouza = kouza + 12000 where id = r1.id; end if if; update tbl_daityo end loop; set kouza=(case when age > 64 or age < 19 then kouza + 20000 commit; else kouza + 12000 end; end); 21 / Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 22. Ⅲ. 極力、シンプルなコードを PL/SQLエンジン、SQLエンジン declare cursor c1 is select id,age from tbl_daityo; r1 tbl_daityo%rowtype; SQL begin エンジン f for r1 in c1 loop p if r1.age > 64 or r1.age < 19 then update tbl_daityo set kouza = kouza + 20000 where id = r1.id; else ls PL/SQL update tbl_daityo set kouza = kouza + 12000 where id = r1.id; エンジン end if; end loop; commit; end; 22 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 23. Ⅲ. 極力、シンプルなコードを チューニング案件でよく聞く言葉 「SQL を見せてください」 「インデックスは有効ですか?」 「実行計画に問題はないですか?」 「アナライズは最新ですか?」 declare cursor c1 is select id,age from tbl_daityo; r1 tbl_daityo%rowtype; begin for r1 in c1 loop if r1.age > 64 or r1.age < 19 then これ update tbl daityo set kouza = kouza + 20000 where id = r1 id; tbl_daityo r1.id; else update tbl_daityo set kouza = kouza + 12000 where id = r1.id; end if; end loop; commit; 23 end; Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 24. Ⅲ. 極力、シンプルなコードを 是非、これも聞いて欲しい 「SQL は、どこからKickされますか?」 「トランザクション・フローを教えてください」 「トランザクション・フロ を教えてください」 「詳細設計書見せてください」 ※ やりすぎか・・・ ※ 8.1.6 以降 SQL-92 SQL 92 CASE ※ 9i 以降 MERGE SQL:2003 ※ 9i 以降 l 独自 Multi Table Insert l i bl i Oracle独自 ※ Bugにだけ、ご注意ください。。。 g 24 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 25. Oracle Unconference Ⅰ. 松下雅@コーソルって誰? Ⅱ. システムの構成を考えよう Ⅲ. 極力、シンプルなコードを Ⅲ 極力 シンプルな ドを Ⅳ. Ⅳ デフォルトの設定って? Ⅴ. Question & Answer . 25 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 26. Ⅳ. デフォルトの設定って? インスタンス → memory_target ※11g 以降 降 ※10g 以降 sga_target sga target データベース → AUTOEXTEND 26 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 27. Oracle Unconference Ⅰ. 松下雅@コーソルって誰? Ⅱ. システムの構成を考えよう Ⅲ. 極力、シンプルなコードを Ⅲ 極力 シンプルな ドを Ⅳ. Ⅳ デフォルトの設定って? Ⅴ. Question & Answer . 27 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved
  • 28. Ⅴ 全体を通して Question & Answer 28 Copyright (C) 2009 CO-Sol Inc. All Rights Reserved