ネタ(アンチパターン)募集 データベースコンサルタントのノウハウちょい見せ

Oracle RDBMSなどのオラクル製品や各種インフラ技術(OS、ストレージ、ネットワーク)といった話題を取り上げます。著者は小田圭二、「門外不出のOracle現場ワザ」、「絵で見てわかるOracleの仕組み」、「絵で見てわかるOS/ストレージ/ネットワーク」などの著作もあります

ホーム > スポンサー広告 > ネタ(アンチパターン)募集ホーム > DBA > ネタ(アンチパターン)募集

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | トラックバック(-) | コメント(-)

ネタ(アンチパターン)募集

数か月先のDBマガジンに「データベースのアンチパターン(続編)」の特集を書くことになりました。私の中では「アンチパターン(良く見るダメな設計)」のネタは十分にあるのですが、せっかくブログを書いているので皆様からもネタを募集したい(活性化したい)と思います。なお、ネタ(項目)だけであって、中身は私の考えで書いてしまいますので、その点はご了承ください。

☆現時点の案(ネタの余地は、あと3,4個くらいでしょうか)
OLTPなのにSQLが重い
キャパシティが見積もれていない
領域監視をしていない
DBリンク地獄
バッチがリランできない
外部キーに索引をつけていない
バッチで適切に処理を分割していない
トランザクションスコープが不適切
再利用しない(コネクションなど)  ・・作っては捨てる
バインド変数を使っていないSQL
不適切なリトライの仕組み
リソースのバランスが悪い
詰まると接続が増えるアーキテクチャ
ひきづられるアーキテクチャ
性能分析できない(タイムスタンプつきのログが取れない)

☆前回の特集の項目
インデックスがついていない
インデックスが多すぎて性能劣化
結合条件のつけ忘れにより直積処理が発生
結合する表が多すぎる
パズルかのようなSQLで性能が出ない
ビューを多用して性能がでない
RDBMSをデータ格納のための1つの大きな箱としか見ない
列が多すぎる表
使われているかどうかわからない表が残っている
外部からの監視や正常動作の監視が抜けている
データベースのメンテナンス(再構成など)をしていない
リカバリできない
通信相手の生き死に確認は難しい
サービスに問題が無いか判断できない(クラスタソフト任せには限界あり)

上記に含まれない「良く見るダメな設計」の心当たりがあれば、ぜひ、コメントに入れていただけばと思います。よろしくお願いします!
スポンサーサイト
[ 2008/12/18 13:53 ] DBA | TB(0) | CM(12)
はじめまして。
私はWEB系システムのDBチューニングをよく担当しているのですが
(「OLTPなのにSQLが重い」に含まれるかもしれませんが)
「なんでもかんでもリアルタイム集計」というのはよく遭遇します。
ある程度まとめて(月、週、日、時間、数分単位など)集計するだけで
よいような情報情報であっても、ページ表示時に毎回集計しているなどです。
アクセス数やデータ量が増えてくると大変なことになってしまいます。

「負荷テストを行っていない」というのもよく遭遇します。

[ 2008/12/19 10:50 ] [ 編集 ]
コメントありがとうございます。

そうですね。
このリアルタイム集計というのは危ないです。正規化だけだと、集計済みの表というのは作らないので、それをSQLで実現しようとすると、このアンチパターンが発生します。

実は私も若かりし頃、このアンチパターンにはまったことがあります。懐かしいです。

ということで、採用させていただきたいと思います。楽しみにお待ちください。
なお、2009年の3月25日ころ発売です!
[ 2008/12/22 08:23 ] [ 編集 ]
> はじめまして
> いつもブログを拝見しています。
> ネタになるかはわかりませんが、このところ負荷テストなどで遭遇する事象を上げます。
> 1.日時が検索条件に含まれるアプリケーションで、DATE型もしくは、TIMESTAMP型の項目に対しTO_CHARを使用するため、インデックスが使用されずフルスキャンが発生する。
> 2.H/Wの性能が高く、バッファキャッシュヒット率が100%に限りなく近いのに、レスポンスが悪くlatch free待機イベントなどがADDMレポートに出力されている。
>
> どれも高負荷時や運用開始数年後を想定しないで
> 設計や実装がされているように思われます。

コメントありがとうございます。「1」のtimestampの件は最近、増えてきた気がします。インデックスのルール(インデックスと型を同じにする)の応用ですね!

せっかくなので、一般論として「2」の事象へコメント(解説)します。実は、「2」は、過負荷のパターンでも見られます。CPU待ちになると待機イベント待ちの時間が長くなる(特にlatch関連)のです。latchの種類に関係なく、latchの平均待機時間が延びているようでしたら、おそらく過負荷だと思います。それ以外のパターンだと、もしかすると一部のブロックを何度もアクセスするなどして(フルスキャンを何度も繰り返す)、latch競合起こしているのかもしれません。

「どれも高負荷時や運用開始数年後を想定しないで
設計や実装がされているように思われます。」・・・これは真理だと思います。
私も記事を書いてみたところ、多くのアンチパターンでは、「性能テストしましょう。
将来を見越して設計やテストしましょう。」という対策になりました。
[ 2008/12/22 08:35 ] [ 編集 ]
OLTPなのにSQLが重い
再利用しない(コネクションなど)  ・・作っては捨てる
バインド変数を使っていないSQL
詰まると接続が増えるアーキテクチャ

この4つの合わせ技だった所を見た事がありますが、負荷をかけるとメモリ不足、CPUの利用率が100%、そうならない場合でもephemeral portsが枯渇したりと、見事なまでに症状がでますよね。

DBマガジン楽しみにしてます。(^^
[ 2008/12/25 14:28 ] [ 編集 ]
discusさん、ありがとうございます。

おっしゃるとおり、この組み合わせ(1つ2つ少ないこともあり)は鉄板です。よく見られるのが、CGIのシステムですよね。

discusさんは以前、Oracle以外のDBMSをお使いと書いていたかと思いますが、この現象はRDBMSに依存しないですよね。

負荷の低いあいだは、まあまあの性能なんですが、ある一定の負荷を超えると、どどどどっと性能が劣化していって、しばらくの間、性能が極端に落ちるという現象で現れたりします。

皆さんも、気をつけましょう!
[ 2008/12/25 22:14 ] [ 編集 ]
platform特性を意識しない、
というのはアンチ・パターンとしてあると思います。

Databaseも結局は 石の上の、OSの上の
アプリケーションなので、
各プラットフォームの特性を理解することが
重要なのですが、それを怠ってしまう。

例えばHP-UX のプロセスに対するスケジュール・
ポリシーや、AIXのファイルキャッシュの
扱われ方などが代表的にはあると思います。

Oracleの場合だと、
マニュアル「管理者リファレンス for Linux and UNIX-Based Operating Systems」を読むだけでも、
回避可能なことって結構ある気がします。
[ 2008/12/28 16:57 ] [ 編集 ]
私は良くプロジェクトの火消しに行きますが
ほとんどがアプリケーションの
パフォーマンスチューニングに終始します。
そのとき非常に困るのが
アプリケーションから発行する
SQLに"ビュー"を多用していることです。
ほとんどのプログラマ、もしくはプロジェクトは
ビューをプログラムの共通化と
同義に解釈しています。
冗長するからとなんでもかんでも
共通化する"クセ"はプログラマの"性"でしょうか。
[ 2008/12/29 00:32 ] [ 編集 ]
矢木さん、およよさんのご指摘事項は良く見られると思います。

およよさんの通り、共通化、部品化としてビューが使われていて、それがトラブルを招いているケースは多いと思います。前回の記事の”ビューの多用”のテーマのところで、解説しています。同じ考えの人が居てうれしいです。

矢木さんのコメントももっともで、”土台”という考えが抜けている人は多いと思います。土台がぐらついているとDBMSもうまくうごきませんよね。これは広い意味で土台(OSやストレージなども含む)として、採用したいと思います。アンチパターン名の候補は、「足元おろそか」あたりでしょうか。
[ 2008/12/30 14:43 ] [ 編集 ]
小田さん、採用ありがとうございます。

もうひとつ、追加で案です。


アンチ・パターン案 「DBMSに疑いを持ってかからない」

DBMSだってソフトウェアである以上、
大なり小なりのバグを含んでいるのは当然なのですが、
DBMSは導入したらしっぱなし っていう
パターンで、いざ運用フェーズで障害が
発生する、なんてことも結構あるのでは、と思います。
(テスト不足。。。ということもありえますが、
長時間動かしてみないと分からない、、という
例もあると思います。)

ベンダーから提供される集積パッチを事前に適用しておくことはもちろんですが、
ベンダーの情報サイト
(Oracleの場合はkrownなど。。当然保守契約締結前提ですが)
を見れば、有名どころの障害については、
ある程度情報開示しているはずなので、
導入対象のバージョン(パッチレベル含む)
に関する重大な障害(インスタンスダウンやgenericなqueryに対する結果不正)
は公開されていると思うので、
それらの事前対処をしておく、

上記で事前に防げる障害は結構あると思います。

DBMSにバグがあることを、ある程度前提として
考える、ということが必要 (^_^)
[ 2008/12/30 21:24 ] [ 編集 ]
おっしゃるとおり、PSRの適用はすべきですし、KROWNなどを見て、未然防止をすべきだと思います。

悩んだのが、障害の未然防止(どちらかというと”やるべき作業をやらない”)なことです。設計のアンチパターンから離れているので、今回は書きにくいなあと思います。おそらく、第3回のアンチパターンで予定しているマネジメントのアンチパターンになら入れられる気がします。「集積パッチの未適用、トラブル未然防止をしない」という感じで。

あと、適用しないのは、「やらなきゃいけないけど、やるための時間や工数が取れない。適用にリスクがあると思っている」という意味合いも強いと思います。皆さん、心の中では「適用しないとダメなんだよなあ」と思っている・・・と私は現場で感じています。
[ 2008/12/31 02:32 ] [ 編集 ]
こんにちわ

12月号の記事読ませていただきました。
参考になりました。

追加です。
DATE型でアンチになるパターンです。
データベースの設計において
日付だからと、なにも考えずにDATE型を使用。

これが結構困り者。
DATE型は時間が付加されますが
これを考慮せずに範囲検索を行うと
下手するとデータが丸一日分抜けてしまう。
例 2007/01/01 00:00:00 ~ 2007/12/31 23:59:59
つまり、検索時の条件には時間を考慮して
検索するようにしなければならない。

もちろん、00:00:00オンリーであれば
この限りではないですがこれを保障するように
実装するのはもちろんめんどくさい。
実際、結合試験工程でこの問題が発覚し
プログラムを修正することができないため
日付データ項目の
時間部分をすべて00:00:00にしcheck制約を
付加したこともありました。

ずいぶん昔にヘルプで赴いた
プロジェクトでこの問題を発見し
とつとつとデータベース担当に説明したのですが
なぜか無視された経験があります。(泣

あまりにも理解していないSE, 製造者が多い
アンチパターンのように思います。
[ 2009/01/09 22:01 ] [ 編集 ]
およよさんの通り、この事象もよくありますよね。まだ若かりしころの僕もやりました。はい。

sysdateで時刻をとって、そのまま入れちゃったりしましたね。そして、=条件で比較して、はたと困る。イコールじゃだめじゃん!

そういえば、時分秒を0にしてもまだまだトラブルの種があるんですよね。date型だけでも、短い特集記事がDBマガジンに書けそうです^^

矢木さんやいろいろな方からアンチパターンのアイデアをいっぱいいただいたので、一部は次々回としたいと思いますが、いつかは載せられそうです。

ありがとうございました。
[ 2009/01/10 01:50 ] [ 編集 ]
コメントの投稿













管理者にだけ表示を許可する
プロフィール

odakeiji

Author:odakeiji
小田圭二 日本オラクルのテクノロジーソリューションコンサルティング統括本部においてデータベースのコンサルタントをしている。今までのキャリアでは、社内教育部隊で、データベースやOS、ネットワークを教える経験を5年ほど積んだり、コンサル部門で主にDB(インフラ含む)のコンサルを10年程度経験した。また、コンサルタントとして、主に大規模ミッションクリティカルシステムを担当。社内では”火消し”とも呼ばれ、システムトラブルの火消しをいくつも担当していたこともある。
ポリシーは、「OracleもOS上で動くアプリケーションにすぎない。だから、OS、ストレージ、ネットワークを学ぶべき。アーキテクチャから考えろ」。
スキル面の興味は、アーキテクチャ、DBA、インフラ技術、教育、コンサル手法など。
本ブログのポリシーは「週に1回、DBAやインフラ担当者の役に立つ記事を書きたい」です(守れるだけ、守りたい・・・・)
なお、本ブログにおいて示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。ご了承ください。

私の主な著書の紹介です。もしよかったら、お役立てください。他にもオライリーなどがあります

●「絵で見てわかるOS/ストレージ/ネットワーク データベースはこう使っている」小田圭二 著
私のポリシーである”DBMSもOSの動くアプリケーションに過ぎない”に基づいて、OSとDBMSの関係、ストレージとDBMSの関係、ネットワークとDBMSの関係、を解説した珍しい書籍です。DBを学んでひと段落したら、DB使いもインフラ全体を意識しなければなりませんが、そのような人にお勧めです。企業ユーザー向けのIT本としては、2008年度翔泳社No1だとか(最後は出版社談)。

●「絵で見てわかるOracleの仕組み」 小田圭二 著
教育に携わる者としての私の思い「丸暗記するな。アーキテクチャを知るべき。絵で説明すべき」を具体化した、Oracleの入門書です。Oracle初心者向きですが、Oracleの基礎となる部分の動きを解説しているため、バージョンに依存せずに何年先でも使えます。逆に、本書の内容を理解せずに、ひたすら丸暗記すると応用力が身につきません。この本を読むだけで何かできるようになるわけではありませんが、アーキテクチャを身につけて、本当の技術力を身につける第一歩として欲しいと思っています。

●「44のアンチパターンに学ぶDBシステム」 小田圭二 著
本書は、企業のDBシステムの設計/構築から運用管理、プロジェクト管理までの各フェーズにおけるトラブル(失敗)事例について、アンチパターン(べからず集)とその回避策/防止策として解説するものです。チェックリストとして使っていただいても構いません。分かっていてもアンチパターンは避けられないことも多いものです(政治とか)。そういう方には、同じ仲間は多いのだなと再認識していただくための一服の清涼剤としていただければと思います。

●「門外不出のOracle現場ワザ」 小田圭二 他 著
一番最初に出た本です。結構とがった内容を扱っています。
・パフォーマンス分析の考え方(私の担当)
・性能テストや障害テストの仕方、設計の注意点(主に私が執筆)
・コストベースオプティマイザ(10gベース)のアーキテクチャ
・コネクションプーリング
最新のOracleの内容は含んでいませんが、今でも性能の考え方やオプティマイザの考え方は使えるはずです。オプティマイザをここまで解説している本を私は知りません。

●「続・門外不出のOracle現場ワザ」 小田圭二 他 著
「続」の名前の通り、次に出た本です。ちょっと尖り過ぎたかもしれません^^; でも本当に使う内容を選んだつもりです。一流になりたい・他の人と差をつけたい人にお勧めでしょうか。
・性能の良いSQLの書き方
・文字化けの仕組み
・障害(特に性能やハング)の分析・対応方法(私が執筆)
・障害をリアルタイムに分析・対処する方法(私が執筆)
・オプティマイザの使い方ノウハウ
・アップグレードのノウハウ

●「データベース」小田圭二 他 著
私にしては堅い本です。なんせ、共同執筆者が大御所の國友義久先生です。階層型DBMS、ネットワーク型DBMS、リレーショナル型DBMS、XMLDBMS、OO(オブジェクト指向)DBMS、DBMSの持つ機能、DBMSのセキュリティ、データベースの著作権、監査、モデリング、正規化といった内容を網羅しており、深い記述は無いものの、DB技術全体を抑えるのに向いている一冊です。ある程度技術力がついたエンジニアの方が、DB全体を振り返りたい(勉強したい)というときの最初の1冊としてお勧めです。



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。