ピアソンが販売している学生情報システムPowerSchoolを使用しています。 PowerSchoolはOracleをバックエンドデータベースとして使用しており、独自のレポートビューをいくつか作成する必要があります。ピアソン氏によると、本番マシンに変更を加えた場合はライセンスが無効になるため、その目的のために、dblinkを介してPowerSchoolデータストアでビューを作成するためにほぼ厳密にOracle 11gR2 Expressを実行しています。また、ODBCおよびOracleでの異種サービスサポートを使用して、SQL Serverマシンと統合します。
PowerSchoolマシンの負荷を軽減するために、よりコストのかかるクエリのほとんどを、1時間ごとに(または必要に応じて)更新されるマテリアライズドビューとして設定しています。以前のグーグル待機イベントから、DBクマとマテリアライズドビューwayを平均的なクマよりも多く使用しているように感じます。
Alert_xeファイルを調べていると、ログが新しいシーケンスに進んでいることを示すイベントが頻繁に発生します。
LOG
Sun Mar 18 22:16:22 2012
Thread 1 cannot allocate new log, sequence 26914
Checkpoint not complete
Current log# 1 seq# 26913 mem# 0: C:\ORACLEXE\APP\Oracle\FLASH_RECOVERY_AREA\XE\ONLINELOG\O1_MF_1_70W1H0SF_.
LOG
Thread 1 advanced to log sequence 26914 (LGWR switch)
より長い出力 http://Pastebin.com/m3j5YT0B
research をいくつか実行しましたが、チェックポイントの頻度を変更するか、ログを大きくする必要があるという indicated のアドバイスを見ました。ここdbaで、チェックポイントが完了していないことを確認できる唯一の参照は this でしたが、これは私が見ているものに対応していないようです。
Http://asktom.Oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1364093900346690427 ">こちらからTomに質問
「同じサイズのログをより多く割り当てるか(そのため、チェックポイントを完了するまでに時間がかかる)、ログファイルを大きくすることができます(実際には、新しい大きなログを作成してから、古い小さなログを削除する必要があります)。しかし、ポイント「新しいログを割り当てることができません」というメッセージが表示されずに、ピーク負荷を処理するのに十分なREDOログを構成する必要があります。」
スレッドの1つで、誰かが次の出力を要求しました。selectgroup#、bytes/1024/1024 from v $ log;
私のです:
GROUP# BYTES/1024/1024
---------------------- ----------------------
1 50
2 50
の出力
SELECT OPTIMAL_LOGFILE_SIZE FROM V$INSTANCE_RECOVERY;
無効です。
私は走った
show parameter target
this を読み込んだ後、出力は次のようになります。
NAME TYPE VALUE
-------------------------------------------------- ----------- ---------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 0
memory_target big integer 0
parallel_servers_target integer 16
pga_aggregate_target big integer 90M
sga_target big integer 272M
したがって、これらすべてから収集したのは、Oracleがリカバリで使用される定期的なチェックポイントを実行しているが、ログが 頻繁に切り替わる であるため、それらのチェックポイントが完了できないことです。これはすべて、alert_xeファイルに記録されます。
Oracle guide から、私のオンラインログREDOファイルのサイズを「システムが生成するREDOの量」に合わせる必要があります。マテリアライズドビューの自動更新が頻繁に行われるため、平均的なクマよりもはるかに多く生成されていると思います。
だから、私の質問:
1)これは問題の正しい診断ですか?
2)私のoptimal_logfile_sizeパラメータがnullであることは問題がありますか?
3)マテリアライズドビューにアクセスする可能性が高い(したがって、多くのやり直しが発生する)可能性がある場合、アラートログに表示されるチェックポイントが完了していない/ LGWRの切り替えを解決するには、どのアクションが適切ですか?これは、REDOログのサイズを増やすだけの問題ですか?
fast_start_mttr_target
はゼロに設定されていますが、これは焦点にすべき問題ではありません。ソースデータベースを変更してマテリアライズドビューログを作成することはできないため、MVを更新するたびにすべてのレコードを削除してすべて再挿入する必要があり、過剰なやり直しが発生します。この問題には、さまざまなアプローチが考えられます。ここに幾つかあります。