• 締切済み

チューニングのこつ

大雑把すぎるかもしれませんが、 アプリケーションチューニング パラメータチューニング SQLチューニング のポイントみたいなのがあれば、教えてください。 よろしくです。 それと、 作成したオブジェクトのシンプルな確認方法も知っておきたいと思います。 オブジェクト作成時に、エラーメッセージが返ってこなかったので「それでよし」ということではなく、 例えば、シノニムを作成したら、スキーマ指定なしで見れるとか、 シーケンスを作成したら、..... パッケージを作成したら、..... インデックスを作成したら、など、種類に応じて、妥当な確認方法があると思います。

みんなの回答

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.5

>カーソル 作る時のSELECTの範囲や、データベースのカーソル存在中の参照ロックだろうなとは想像付くんですが、本当にトランザクション中にデータを書き換えられない様に保障しなくてはならないケースだと、カーソルの処理を止めろってアドバイスは無しでは? #カースバイケースですよね?

全文を見る
すると、全ての回答が全文表示されます。
  • sajikagen
  • ベストアンサー率100% (1/1)
回答No.4

No3へのNo2の補足。 40~100万行くらいのテーブルを6年くらい扱っていて、アプリやSQLの性能には常に気を使う環境にいるのですが、経験的に速いです。 理屈はよくわかりません。 例えば、縦に品目、日付別にならんだ明細数量を、月ごとに横に加算していく処理などが速いです。 ダメSQLに書き直しても速くはなりませんが。

全文を見る
すると、全ての回答が全文表示されます。
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.3

>>アプリケーションチューニング >ループやカーソルで処理しているところを極力SQL処理にする。 これが、何で効果があるのか補足願えますか? #oo4oとかに書き換えるなら判りますが、SQLにしたら 逆にオーバーヘッド食うケースの方しか思い浮かばない。

全文を見る
すると、全ての回答が全文表示されます。
  • sajikagen
  • ベストアンサー率100% (1/1)
回答No.2

>アプリケーションチューニング ループやカーソルで処理しているところを極力SQL処理にする。 処理するレコードを極力少なくできるようにする。 ごむたいなupdate文を insert文に書き換える。 >パラメータチューニング DBバッファ、ログバッファの大きさをでかくする。 (効果が大きいのはredoログ周りくらいなもん) >SQLチューニング インデクスがひけてるか確認する。 (is null検索、OR検索などをやめる) テーブルの結合順序で速度が変わるのでチェックする SQLチューニングについていえば、これ以外にもたくさんあるけど、大雑把に言えばこんな感じ。 速度を向上する上で効果があるのは アプリケーションチューニング 50% SQLチューニング 45% パラメータチューニング 5% って感じ。

全文を見る
すると、全ての回答が全文表示されます。
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

>大雑把すぎるかもしれませんが、 その通り。 資格が、シルバー、ゴールド、プラチナに分かれるくらいデータベースのチューニングは複雑で難しいです。 大体、どういうところにどういうパラメタ変えるかで、一時的には良くなっても運用していくうちに不都合起きるとかも有るし。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【チューニング】インデックスとヒント句の違い

    いつもお世話になっています。 oracle9iR2を使用しています。 速度アップのためチューニングが必要なsqlが指摘されたのですが、 あるカラムにインデックスを作成すべきとの指摘がありました。 インデックスを作成するだけである程度改善される場合もあるのでしょうか? それともインデックス作成後、対象のsql/に、*+INDEX・・・ などのようにSQLにヒント句を記載してこそ効果を発揮するものなのでしょうか? 質問がまとはずれでしたら申し訳ありません。 どなたかご教授お願いします。

  • Oracle初心者向けの本やサイトについて

    こんにちは。 こんど仕事でOracleに関わることになりました。 情報処理試験で勉強したので、簡単なSQLくらいなら分かるのですが、 Oracle自体については経験がありません。 そこで勉強しようと思ったのですが、、、 出てくる単語の意味が不明で、理解できませんでした・・・。 たとえば、 「スキーマ」とか「シノニム」とか調べてみても、 スキーマはユーザみたいなもの、シノニムは別名、とか書いてあるだけで、 実際のユーザとどう違うのか、どうして別名をつける必要があるのかが分かりません。 Oracle = ただのRDBと思っていたら、 インスタンスとかオブジェクトとか、なんだかオブジェクト指向みたいな単語も出てくるし。 ほかにも、Oracle SIDとかTNSとか、専門用語のオンパレードのようです・・・。 私の中では、 「データベースを作って、その中にテーブルを作って、その中でデータを管理する」 くらいだと思っていたのですが・・・。 そこで、Oracleの初心者に優しくて理解しやすい本やホームページなどがあったら、 教えていただけないでしょうか? 自分でも探してみたのですが、いまいち難しいものばかりなのです。 宜しくお願いします。

  • oracleのsequenceについて

    oracle masterのオラクル入門の勉強をしています。 知識があやふやなので教えてもらいたいのですが、 オブジェクトであるsequenceにアクセスできるのは 作成したユーザーのみ(そのスキーマ内)? or 複数のユーザー(全てのスキーマ内)でも可能? どちらでしょうか? スキーマの名前が変更されているかもしれませんが、 スキーマとユーザーは同じ意味ですよね?

  • チューニングの基礎について教えて下さい

    vb.net+mysql(OS:WindowsXP)で趣味のコーディングをしています。 動かしているのは、毎日20時間程度かけて実行しているバッチ処理です。 各テーブルに、最大で数百万~1千数百万レコード程度を格納しています。 最近、プログラム内で、mysqlが何の例外も吐かずに止まってしまう(もしくは落ちている?)という現象が多発しています。 現象が起きるSQL文は毎日違い、同じSQLでも、値が返ってくる日と返って来ない日があります。 mysqlの全体的なチューニングが必要なのだろうと思っているのですが、 とりあえずmysqlの各種パラメータの監視をする必要があるのだろうなと思っています。 何か典型的な手法などはあるでしょうか。 (show status で返ってくる値を監視しときゃいいんだよ、とどこかで見た気がするのですが、  それってみんな自分でイチから監視プログラムをハンド作成しているのでしょうか?) よろしくお願いします。

    • ベストアンサー
    • MySQL
  • DBリンク&シノニム経由インデックス

    Oracle8iサーバ(サービス名:Aサーバ)と Oracle10gサーバ(サービス名:Bサーバ)があります。 Aサーバに作られた、aスキーマに、test_tableというテーブルがあります。 そのtest_tableをBサーバに作られた、bスキーマから参照する為に、 DBリンク:BA_linkを作成しました。 実際に、bスキーマから参照する場合は、 同スキーマに、 CREATE SYNONYM test_table FOR test_table@BA_link; のように作られたシノニムを利用して、参照します。 抽出に時間がかかるので、インデックスを作成しようと思うのですが、 どのスキーマにどのように作成すればよいのでしょうか? ちなみにインデックスの対象にしたい項目は、 VAR_ITEM VARCHAR2(10) NUM_ITEM NUMBER(5) とします。 ちなみにbスキーマにて、 CREATE INDEX test_table_IX1 ON test_table (VAR_ITEM, NUM_ITEM); と実行したところ、 ORA-02021: リモート・データベースに対するDDL操作が無効です・ というエラーが発生しました。 DBリンク先自身に、作成すべきということはなんとなく予想が つくのですが、そのインデックスはDBリンク経由でも有効なのでしょうか?

  • SSISパッケージの処理失敗時にRollbackさせる方法がわかりません

    SQL Server2005 のSSISにて、 以下のような処理を作成し、 SSISパッケージ1は成功、SSISパッケージ2が失敗と なった場合に、SSISパッケージ1の内容が Rollback されないのですが、 これをRollbackする方法はあるのでしょうか?? ┏━━━━━━━━┓ ┃Begin Transaction ┃ ┗━━━━┳━━━┛         ↓ ┏━━━━┻━━━━━━━┓←シーケンスコンテナ ┃┏━━━━━━━━━━┓┃ ┃┃SSISパッケージ1(dtsx) ┃┃ ┃┗━━━━┳━━━━━┛┃ ┃        ↓         ┃ ┃┏━━━━━━━━━━┓┃ ┃┃SSISパッケージ2(dtsx) ┃┃ ┃┗━━━━━━━━━━┛┃ ┗━━━━┳━━━━━━━┛         ↓ ┏━━━━┻━━━━━┓←失敗時 ┃Rollback Transaction  ┃ ┗━━━━━━━━━━┛ なお、SSISパッケージ1、2共に、 処理内容はシーケンスコンテナ内に入れています。 【SSISパッケージ1、2のイメージ】 ┏━━━━━┓←シーケンスコンテナ ┃┏━━━┓┃ ┃┃処理1 ┃┃ ┃┗━┳━┛┃ ┃   ↓   ┃ ┃┏━━━┓┃ ┃┃処理2 ┃┃ ┃┗━━━┛┃ ┗━━━━━┛ (元々単体でトランザクションを張っていたため、 シーケンスコンテナ内に入れている) どなたかご教授頂けると幸いです。

  • ビューにインデックスを設定できませんか?

    SQL Server 2005 EXPRESS を使用しています。 トランザクションのテーブルにマスタを結合して表示するビューを作成しました。 実際に利用する時はトランザクションテーブルの主キーを検索に多用すると予想されるので、該当のフィールドにインデックスを設定したいのですが… Management Studio でインデックスを設定しようとするとエラーになります。 エラーメッセージは インデックス '' の作成に失敗しました。 (Microsoft.SqlServer.Express.Smo) ------------------------------ ADDITIONAL INFORMATION: Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.Express.ConnectionInfo) ------------------------------ ビュー 'View' に インデックス を作成できません。ビューにはスキーマがバインドされていません。 (Microsoft SQL Server, Error: 1939) となっています。まさにメッセージのとおりだとは思うのですが 「ビューにスキーマをバインドする」方法がわかりません。 どなたかご教授いただければ助かります。 よろしくお願いいたします。

  • oracleの順序のexp/impにつて

    oracleの順序のEXP/IMPについてです。 oracle 11gでlinuxなのですが、別サーバ上にあるAというスキーマ(例:hon1)の シーケンスを、別サーバ上にあるBというスキーマ(例:dev1)に、expdp/impdp コマンドで、sequenceのみを、export/importをしようとしています。 expdpコマンドでsequenceのみはexportできたのですが、impdpコマンドで、sequence をimportするとエラーがでて失敗します。 SEQUENCEの処理はできるのですが、OBJECT_GRANTの作成でエラーで失敗します。 別環境の別スキーマに入れようとしているので、権限の作成で失敗するのは当たり前 かもしれませんが。 回避する方法、grantを実行しない方法はないのでしょうか。 また、表のimportみたいに、記述したテーブルのみをimportするような、ターゲットの sequenceのみをimportするような記述はできないのでしょうか。 宜しくお願い致します。 環境:oracle 11g、Linux

  • SQLserver2008でのSQL発行時ののオブジェクトエラーについ

    SQLserver2008でのSQL発行時ののオブジェクトエラーについて 「sa」ユーザーでDB作成後テーブルも複数作成。そのあとにこのSQLを「SELECT * FROM (テーブル名)」で発行すると、赤線が出てきてオブジェクト(テーブル名)が無効です。」とのエラーメッセージが出てきます。けれども結果は正しく表示されます。 何がいけないのでしょうか? 「DB名」.「dbo」.「テーブル名」でも同じです・・・ スキーマ関係があまり詳しくないので是非教えてください。

  • シーケンス取得について

    AスキーマとBスキーマがあり AにはSというシーケンスが作成されて、GRANTでBに権限付与されています。 BのUSER_SEQUENCESにはもちろん存在しないため、 SELECT MAX_VALUE FROM USER_SEQUENCES WHERE SEQUENCE_NAME でMAX_VALUEの取得でエラーになります。 これを回避する方法ってありますでしょうか?? もしくはBのUSER_SEQUENCES に追加する方法がありますでしょうか? どなたかお願い致します。