• ベストアンサー

Oracle8.1.6のチューニング全般について

Oracle8.1.6のチューニングについてお伺いした事があります。 既存のOLTP系システムのDB専用サーバがハード交換となり、 新しいサーバにてDBを再構築する事となりました。 これを機に以下のチューニングを行い、パフォーマンス向上を考えております。 現在検討している手段は以下となっております。 ・ANALYZEによる全表の統計情報の取得 ・SGAメモリ割り当ての見直し 上記以外でレスポンス全般に大きな影響を与える箇所というのは ありますでしょうか?(Windwsの設定等も含む) また、割り当て直したSGAメモリの主要となる値を記載させて頂きますのでご指導頂けますでしょうか? db_block_buffers = 64 (MB) shared_pool_size = 512 (MB) log_buffer = 3 (MB) sort_area_size = 1 (MB) db_block_size = 8 (KB) サーバスペックは以下となっております。 OS :Windows2003 Server CPU:Inter(R) Xeron(TM) CPU 3.40GHz, 3.39GHz メモリ:6GB(物理) Oracle8.1.6 Oracleへの同時接続セッション数:50~100(最大時) 上記以外に必要な情報があれば、ご指示願います。 長々となりましたが、よろしくお願い致します。

  • Oracle
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1さんのサポートされないという件は別にして メモリが6Gあるのに対してDBキャッシュが512Mというのは少し 少ない気がします。また一番効果があるチューニングは SQLチューニングです。今まで動いていたSQLが最適なものであるか どうかをチェックし、実行計画が最適になるようにヒント句などを SQL文中に付け加えたりするのも良いかと思います。

montage_go
質問者

お礼

具体的に物理メモリの何%ぐらいまで使用できるか、定かではなかったので低めに設定しておりました。 もう少し増やして様子を伺ってみます。 やはり、個別にSQLのチューニングが必要なのですね。 今回はハード交換のみなのでシステム自体には手を付けない方針となっております。 稼動後、様子を伺いながら調整していこうと思います。 ありがとうございました。

その他の回答 (1)

回答No.1

R8.1.6は、Windows2003での動作を保証しません。 ご存じの上での選択なんですよね?

montage_go
質問者

お礼

はいオラクルのHPではサポート対象外というのは確認しております。 今回は他での実績に基づき、この環境で進めていく方針です。 とはいえ、ハード交換に伴いいずれはオラクルのバージョンアップも視野にいれております。

関連するQ&A

  • OracleのSGA領域の拡張について

    SGA領域の拡張をしておりますがOS上のメモリーの見方が よく分かりません。 SGAを拡張する前は下記のようになっております。 ●MiracleLinux 2.1 [oracle@svr20 dbs]$ free -m total used free shared buffers cached Mem: 1254 1247 7 233 659 190 -/+ buffers/cache: 397 857 Swap: 2000 0 2000 →見方としては free7M + buffers659M + cached190M = 856M  -/+ buffers/cache:とほぼ同じでだいたい856Mあまっている?  と言う見方でよろしいのでしょうか? ●Oracle9.2.0.1 SQL> startup open; ORACLE instance started. Total System Global Area 235999352 bytes Fixed Size 450680 bytes Variable Size 201326592 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted. Database opened. →SGAは235Mとなっております。 ------------ ここで alter system set sga_max_size = 1024M scope=spfile; 発行して1024Mに拡張しOracleとOSを再起動しました。 SQL> startup open; ORACLE instance started. Total System Global Area 1074861156 bytes Fixed Size 451684 bytes Variable Size 1040187392 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted. Database opened. →SGAは1Gとなっており増えております。 [root@svr20 /root]# free -m total used free shared buffers cached Mem: 1254 1212 42 236 668 161 -/+ buffers/cache: 382 872 Swap: 2000 73 1926 →872Mあまっている? 75Mぐらい増やしましたがOS上では減っておりません。 freeは42Mと増えてます。 また、alter system set sga_max_size = 2024M scope=spfile; と拡張しましたら再起動後メモリが足らないのかORA-27123となり起動 できなくなりました。 この場合SGAのメモリ枠は何メガまで拡張できるかどのようにして 判断したら良いか教えてください.

  • 全表走査のチューニング

    Oracle10gでA,B,Cという表があり、Aは50万件で80列、Bは50万件で15列、Cは30万件で15列という表があります。まず表Bを全表走査してGroup Byし、A,CとINNER JOINしてさらにA,B,CとINNER JOINして、ソートしています。諸事情があり、この方法以外選択肢はありません。 実稼働しており、あとはチューニングとしてパラメータの調整と物理的な配置の調整をするチャンスが1回だけあります。 DBサーバのCPUは2つで、ディスクはRAID1でEドライブのみ使用して、I/Oの分散はできません。インデックスは検索・結合列にすべて張っています。 特に気になるのは表Aの列が80列あり、2000文字格納する列も複数あって、列が長いです。DB_BLOCK_SIZEは8Kですがなんとか1ブロックに1レコードは収まっています。 このようなクセのある検索に効果のあるチューニングはありますでしょうか?

  • SGAの上限値を教えてください!

    10GBのメモリを積んでいるサーバに、Oracle Database 10g Enterprise Edition (10.1.0.5)をインストールしてデータベースを作成しているものです。 スクリプトを自分で作成しているのですが、SAG=2000Mにしたところ以下のエラーが出てエラーになってしまいました。   「out of memory」 SGA=1500Mにした所エラーになりませんでした。 10GBもメモリーがあるので、最低でも5GBほどSGAサイズをとりたいのですが、何か特殊コマンドが必要なのでしょうか。 それともSGAサイズの上限はきまっているのでしょうか。

  • oracleのメモリ使用量が97%ほどに・・・減らしたいです

    いつもお世話になります。 oracle8.1.7がインストールされている Linux サーバに関して、現在メモリ使用量が逼迫しているためか、 時々OSの処理が重くなり、応答が無くなる事が多々発生して困っています。 Database:Oracle 8.1.7 Enterprise Edition Linux:RedHat Linux 6.2 freeコマンドで調べたところ、 --------------------------------------------------------------------------- [root@sample dir1]# free total used free shared buffers cached Mem: 2073296 1996752 76544 1575952 112904 813364 -/+ buffers/cache: 1070484 1002812 Swap: 2097136 2536 2094600 --------------------------------------------------------------------------- topコマンドで調べたところ(Shift + M でメモリ使用順としました) --------------------------------------------------------------------------- 6:05pm up 5:06, 2 users, load average: 0.22, 0.11, 0.10 69 processes: 66 sleeping, 1 running, 0 zombie, 2 stopped CPU states: 17.3% user, 1.4% system, 0.0% nice, 81.1% idle Mem: 2073296K av, 1996832K used, 76464K free, 2385012K shrd, 110684K buff Swap: 2097136K av, 2632K used, 2094504K free 816100K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 1672 oracle 0 0 848M 848M 847M S 604M 0.0 41.9 13:47 oracle 1710 oracle 4 0 458M 458M 456M S 445M 1.5 22.6 13:03 oracle 1767 oracle 6 0 350M 350M 348M S 337M 2.3 17.3 10:17 oracle 1764 oracle 6 0 347M 347M 342M S 331M 2.3 17.1 4:38 oracle 1915 oracle 16 0 84564 82M 80532 S 68M 29.2 4.0 0:59 oracle 1688 oracle 0 0 74804 72M 73592 S 71M 0.0 3.5 0:36 oracle 1677 oracle 0 0 62808 61M 61100 S 46M 0.0 3.0 0:44 oracle 848 oracle 0 0 39160 38M 37960 S 36M 0.0 1.8 0:01 oracle 854 oracle 0 0 30092 29M 29632 S 25M 0.0 1.4 0:01 oracle 852 oracle 0 0 14592 14M 14144 S 9.8M 0.0 0.7 0:02 oracle ---------------------------------------------------------------------------  ※10件のみとしました 上記となり、恐らくoracleがメモリ使用量を圧迫し、Swap領域も逼迫した場合にサーバ処理の 応答が無くなると推測しています。 上記を改善するために、init.ora 内の以下の項目を編集しようと考えていますが、数値を決めかねています。 サーバがフリーズ状態(僅かながらもゆっくり動いている)原因について、 何でも結構ですので、アドバイスいただけたらと思います。よろしくお願いいたします。 open_cursors = 1000 max_enabled_roles = 30 db_block_buffers = 64000 shared_pool_size = 524288000 large_pool_size = 1048576 java_pool_size = 0 log_checkpoint_interval = 10000 log_checkpoint_timeout = 1800 processes = 150 log_buffer = 532480 db_block_size = 8192 sort_area_size = 1048576 sort_area_retained_size = 1048576

  • 初回接続の遅い原因について

    環境 言語 :VB6 DB  :Oracle9i 9.2.0 VB6のアプリケーションを起動してから操作できるまでが遅いというクレームを受けています。 テストしてみたところ、初回起動のみ遅いことがわかりました。その為、VBアプリは関係ないと思われます。(全くではないにしても) 初回起動のみですので大きな問題ではないのですが、原因を報告しなければなりません。 Oracleだけを考えた場合の想像ですが、初回接続でディスクにアクセスし、メモリにセッションを保持しているため、次回以降は遅くならないということでしょうか? また、サーバのSGAなど?のメモリのサイズが小さいためにセッション数が多すぎてメモリに保持できないなどの理由もあるのでしょうか? さらに上記を回避したい場合の対応策などはありますでしょうか? どなたかアドバイスお願い致します。

  • Oracleのチューニングについて

    あるWebアプリケーションの一部の処理が、最近極端に処理が遅くなったと感じているものがあります。 アプリケーションの仕様も変えていない(確実とは言えません)と思いますので、OracleDB側(チューニング)の問題ではないかと疑っております。 いろいろチューニングについて調べたところ、まず「データ・ブロック数を減らす」という点を確認しようと思っています。 無駄なブロック数を減らそうとした場合、暫定的な対応にはなりますが、一度データをtruncateしてからデータを再挿入すると、きれいな状態でデータブロックが再生成される、という認識でよいのでしょうか? (一度truncateしても処理スピードが変わらない場合は、「データブロック」の問題ではない、という判断で良いでしょうか?) 逆に上記で変わらない場合は、DB側で確認すべき点・何か原因として怪しいと考えられる点はありますでしょうか? 宜しくお願い致します。

  • ASPからOracle9iへの接続方法

    環境は以下のように変更となりました。 ・サーバーOS:WindowsNT SP6→Windows2000Server ・DB:Oracle8.0.5→Oracle9i ・ASP ・クライアント:Oracle8.1.6のまま ASPでWebからoo4oでOracleDBに接続します。 Oracle8で動作していたASPが、Oracle9iに変更した ところ、ASPの動作で以下エラーがでてしまいます。  エラー内容:   「orasession作成中にエラーが発生しました」 oo4oでの接続は以下のように記述しています。  Set Application("OraSession") =  Server.CreateObjec       ("OracleInProcServer.XOraSession") どんな原因が考えられますでしょうか? お教え下さい。よろしくお願いいたします。

  • 32bit版だと2GBしか使えない?

    環境 OS:Windows 2003 Server(32bit) CPU:Intel(R) Xeon(TM) CPU 3.60GHz メモリ:3.25GB RAM DB:Oracle9.2.0.1.0 上記WinサーバーにOracleを入れています。 Oracleに割り当てているメモリは2GB近くまで設定していますがネットで調査すると32bit版のWinではアプリケーションに割り当てできるメモリは最大2GBまでと書かれていました。 その他のメモリはカーネルに設定されているとのことです。 これは本当のことなのでしょうか? よろしければ上記内容が書かれているマイクロソフトの公式サイトを教えていただけないでしょうか? というのも最近Oracleが不安定になっており、メモリ拡張の検討に入っている為です。 アドバイスお願い致します。

  • Oracle10gXE DB再作成でログインできず

    デフォルトで作成されるDBは、「NLS_CHARACTERSET=AL32UTF8」だが、 JA16SJISTILDE で使いたいため、データベース「XE」を一度削除して、 同じデータベース名で再作成したんですが、再作成後、 sqlplusにてSYSTEMユーザでつなげません。 SYSTEMユーザでつないで、pupbld.sql を流さないと、 新規ユーザを作ってもログイン時にエラーがでます。 警告: 製品のユーザー・プロファイル情報がロードされていません。 PUPBLD.SQLをSYSTEMとして実行する必要があるかもしれません。 どなたか、よろしくお願いします。 ◆以下、手順メモです◆ 1.データベースの削除 >sqlplus /nolog SQL> connect / as sysdba 接続されました。 SQL> shutdown abort ORACLEインスタンスがシャットダウンされました。 SQL> startup restrict mount ORACLEインスタンスが起動しました。 Total System Global Area 146800640 bytes Fixed Size 1286220 bytes Variable Size 75501492 bytes Database Buffers 67108864 bytes Redo Buffers 2904064 bytes データベースがマウントされました。 SQL> drop database; データベースが削除されました。 Oracle Database 10g Express Edition Release 10.2.0.1.0 - Productionとの接続が切 断されました。 2.フォルダの作成 以下のフォルダが存在することを確認。中に存在したファイルを削除。 C:\oraclexe\app\oracle\admin\XE\adump C:\oraclexe\app\oracle\admin\XE\bdump C:\oraclexe\app\oracle\admin\XE\cdump C:\oraclexe\app\oracle\admin\XE\dpdump C:\oraclexe\app\oracle\admin\XE\udump C:\oraclexe\oradata\XE 3.初期化パラメータファイルの作成 以下の内容でテキストファイルを作成し、 C:\oraclexe\app\oracle\product\10.2.0\server\dbs\initXE.ora として保存する。 ---- db_name="XE" control_files=(C:\oraclexe\oradata\XE\ctrl01, C:\oraclexe\oradata\XE\ctrl02, C:\oraclexe\oradata\XE\ctrl03) db_block_size=8192 user_dump_dest='C:\oraclexe\app\oracle\admin\XE\udump' background_dump_dest='C:\oraclexe\app\oracle\admin\XE\bdump' core_dump_dest='C:\oraclexe\app\oracle\admin\XE\cdump' sga_target=400M undo_management=auto undo_tablespace=undo1 ------------------------------------------------------------------ 4.データベースの作成 (1) 初期化パラメータファイルを指定して、nomount 状態で起動する。 >sqlplus / as sysdba SQL> shutdown abort ORACLEインスタンスがシャットダウンされました。 SQL> connect / as sysdba アイドル・インスタンスに接続しました。 SQL> startup nomount pfile=C:\oraclexe\app\oracle\product\10.2.0\server\dbs\initXE.ora ORACLEインスタンスが起動しました。   :   : (2) データベースを作成 (create database コマンド) SQL> create database XE 2 logfile group 1 ('C:\oraclexe\oradata\XE\redo01a.log') size 50M, 3 group 2 ('C:\oraclexe\oradata\XE\redo02a.log') size 50M, 4 group 3 ('C:\oraclexe\oradata\XE\redo03a.log') size 50M 5 datafile 'C:\oraclexe\oradata\XE\system.dbf' 6 size 100M autoextend on next 10M maxsize unlimited extent management local 7 sysaux datafile 'C:\oraclexe\oradata\XE\sysaux.dbf' 8 size 100M autoextend on next 10M maxsize unlimited 9 default temporary tablespace temp 10 tempfile 'C:\oraclexe\oradata\XE\temp.dbf' size 100M extent management local 11 undo tablespace undo1 12 datafile 'C:\oraclexe\oradata\XE\undo1.dbf' size 100M 13 character set JA16SJISTILDE 14 national character set AL16UTF16 15 ; データベースが作成されました。 (3) pfile から spfile を作成 SQL> create spfile='C:\oraclexe\app\oracle\product\10.2.0\server\dbs\spfileXE.ora' 2 from pfile='C:\oraclexe\app\oracle\product\10.2.0\server\dbs\initXE.ora' 3 ; ファイルが作成されました。 --- 5.データベースの再起動 (正常起動の確認) の後、スクリプトファイルの実行。 スクリプトファイル … catalog.sql, catproc.sql, pupbld.sql ---- SQL> shutdown データベースがクローズされました。 データベースがディスマウントされました。 ORACLEインスタンスがシャットダウンされました。 SQL> startup ORACLEインスタンスが起動しました。 Total System Global Area 419430400 bytes Fixed Size 1287784 bytes Variable Size 121637272 bytes Database Buffers 293601280 bytes Redo Buffers 2904064 bytes データベースがマウントされました。 データベースがオープンされました。 > sqlplus / as SYSDBA SQL> @C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catalog.sql : : (結果の出力) : SQL> @C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catproc.sql : : (結果の出力) : ★この後、SQL*Plusを終了して、コマンドプロンプトから  「sqlplus SYSTEM/ORACLE」でログインしようとすると、エラーになる。 ERROR: ORA-01017: invalid username/password; logon denied 理由がまったくわかりません。どうかよろしくお願いします。

  • postgresqlサーバーのチューニングについて

    現在、Access2010+Postgresqlにてシステムを構築しており ADOにてデータベースからレコードの検索・追加・更新を行っております。 今回質問させて頂きましたのはpostgresqlのチューニング方法についてです。 現在、あるテーブルにWANからVPNを経由して接続した状態でSELECTを行うと、 結果が帰ってくるまでにおよそ6分程度かかるテーブルがあります。 (LAN内では4秒程度) 抽出するフィールドを*ではなく、1フィールドに限定しても約4分程度かかります。 そのテーブルには約30000件ほどレコードが格納されており SELECTする際は、bool型のフィールドをWHERE条件に入れています。 例)SELECT * FROM tbl_test WHERE f条件 = TRUE; しかし同じテーブルの別のvarchar型フィールドにLIKE演算子で検索を かけると、すぐ(0.44秒)に結果が帰ってきます。 例)SELECT * FROM tbl_test WHERE 名称 LIKE '%テスト%'; 尚、この場合の結果は20件ほどですので、結果が早いのは当然ですが なぜbool型を条件にした場合に6分もかかってしまうのでしょうか。 システムの都合上、WANからVPNを経由してアクセスする事が必須ですので LAN内の速度が速くてもWANからの速度が遅いのはNGなのです。 一応、Web上で紹介されている一般的なチューニング方法を参考にし postgresql.confの設定値は下記の通りに行いました。 ・shared_buffers → 1024MB ・max_connections → 100 ・effective_cache_size → 512MB ・random_page_count → 2 ・work_mem → 3MB 恐らく根本的にどこかの設定や設計がまずい為、このような結果に なっているのであろうと思うのですが、それを特定するに至りません。 見直すべき点やアドバイスなどがあれば教えて下さい。 <サーバースペック> OS:WindowsXP Pro SP3 メモリ:3GB CPU:Pen4 2.8GHz Postgresqlバージョン:8.3