oracle unconference 松下 4/22

28
Oracle Unconference Oracle Unconference シンプル イズ ベスト シンプルイズベスト デフォルト機能使デフォルト機能使1 株式会社 コーソル Copyright (C) 2009 CO-Sol Inc. All Rights Reserved

Upload: matsushita

Post on 14-Jul-2015

1.035 views

Category:

Technology


0 download

TRANSCRIPT

Oracle UnconferenceOracle 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 Master所有率 96%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.

UseUserデータを貯めておくサーバ

アプリを実行するサーバ

7

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

おくサ するサ

Ⅱ. システムの構成を考えよう

この構成のリソースは・・・?

DB S AP SDB Serv. AP Serv.

NetworkNetwork

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 で絞 ていませんか?SELECT * → AP 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 | uniqq

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

sort -u <ファイル名>

15

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

Ⅲ. 極力、シンプルなコードを

パイプ、コマンドの動き

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

プロセスA プロセスB

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

16

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

Ⅲ. 極力、シンプルなコードを

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

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の動き

find -exec ¥;見つけたファイルに対し、1行ずつ

実行 複数回 同一のコマンドが実実行。複数回、同一のコマンドが実行される。

rmrm

rrmrm

rmrm

rmrm

rm18

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

rm

Ⅲ. 極力、シンプルなコードを

find -exec、xargsの動き

xargs 標準入力で渡されたリテラルを、引数の限界(ARG MAX)まで1つの引数の限界(ARG_MAX)まで1つの

オプションとして実行。同一のコマンドが、まとめて実行される。

find -exec +

が、まとめて実行される。

rm

rmrm

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 {} +○ find . -maxdepth 1 -mtime +200 –exec mv --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

i l t id f tbl d itcursor c1 is select id,age from tbl_daityo;

r1 tbl_daityo%rowtype;

begin

update tbl_daityo set kouza=kouza + 20000

where age > 64 or age < 19;g

for r1 in c1 loop

if r1.age > 64 or r1.age < 19 then

update tbl_daityo set kouza=kouza + 12000

where age > 18 and age < 65;

update tbl_daityo set kouza = kouza + 20000 where id = r1.id;

else

update tbl_daityo set kouza = kouza + 12000 where id = r1.id;

end ifend if;

end loop;

commit;

update tbl_daityo

set kouza=(case when age > 64 or age < 19 then kouza + 20000

else kouza + 12000

end;

/21

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

else kouza + 12000

end);

Ⅲ. 極力、シンプルなコードを

PL/SQLエンジン、SQLエンジン

declare

cursor c1 is select id,age from tbl_daityo;

r1 tbl_daityo%rowtype;

begin

for r1 in c1 loop

SQLエンジンf p

if r1.age > 64 or r1.age < 19 then

update tbl_daityo set kouza = kouza + 20000 where id = r1.id;

lsPL/SQL

エンジン

else

update tbl_daityo set kouza = kouza + 12000 where id = r1.id;

end if;

PL/SQLエンジン

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; これ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;

これ

end loop;

commit;

end;23

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

Ⅲ. 極力、シンプルなコードを

是非、これも聞いて欲しい

「SQL は、どこからKickされますか?」

「トランザクション・フロ を教えてください」「トランザクション・フローを教えてください」

「詳細設計書見せてください」 ※ やりすぎか・・・

CASE ※ 8.1.6 以降 SQL-92CASE ※ 8.1.6 以降 SQL 92

MERGE ※ 9i 以降 SQL:2003

l i bl ※ i 以降 l 独自Multi Table Insert ※ 9i 以降 Oracle独自

※ Bugにだけ、ご注意ください。。。

24

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

g

Oracle Unconference

Ⅰ. 松下雅@コーソルって誰?

Ⅱ. システムの構成を考えよう

Ⅲ 極力 シンプルな ドをⅢ. 極力、シンプルなコードを

Ⅳ デフォルトの設定って?Ⅳ. デフォルトの設定って?

Ⅴ. Question & Answer.

25

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

Ⅳ. デフォルトの設定って?

降インスタンス → memory_target ※11g 以降

sga target ※10g 以降sga_target ※10g 以降

データベース → 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

Ⅴ 全体を通して

QuestionQuestion&&

AnswerAnswer28

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