oracle unconference 松下 4/22
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