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
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