ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
LGWR とは
LGWR(Log Writer、ログライター)は Oracle Database を起動すると必ず動くバックグラウンドプロセスの 1 つで、SGA(共有メモリ)内の REDO ログバッファの内容をオンライン REDO ログファイルに書き出します。
Oracle は障害時にコミット済みトランザクションを必ず復元するため、データブロックの変更内容は REDO(再実行情報)として記録します。この REDO を実際にディスクに書き出すのが LGWR の責務で、データベースの耐障害性を担保する最重要プロセスです。
動作フロー
- ユーザープロセスが UPDATE 等を実行 → REDO レコードを REDO ログバッファに書く
- LGWR が起動条件を満たすと REDO ログバッファ → オンライン REDO ログファイルへ書き出し
- 書き込み完了後、ユーザープロセスに完了通知
- COMMIT の場合はこの完了通知を待ってからユーザーに「コミット成功」を返す
書き込みトリガ
| トリガ | 説明 |
|---|---|
| COMMIT | トランザクションがコミットされた時点(最重要) |
| 3 秒間隔 | 定期的なフラッシュ |
| REDO ログバッファが 1/3 以上 | バッファ使用量しきい値 |
| REDO レコードが 1 MB 蓄積 | サイズしきい値 |
| DBWR がデータ書き込みを行う前 | Write Ahead Logging 原則の保証 |
| ログスイッチ | オンライン REDO ログの切替時 |
Write Ahead Logging(先行書き込み)
Oracle の根幹原則として「データブロックを書く前に必ず REDO を書く」(Write Ahead Logging)があります。DBWR がダーティバッファをデータファイルに書き出す前に、対応する REDO を LGWR が書き終えていることが保証されます。これによりインスタンス障害時もコミット済みデータは必ず復元できます。
並列 LGWR(12c 以降)
Oracle 12c から 並列 LGWR がサポートされ、メイン LGWR とワーカープロセス LG00, LG01, ... LGnn が並列に書き込みを行います。OLTP 高負荷環境での REDO 書き込みボトルネックを大幅に緩和します。
| プロセス | 役割 |
|---|---|
LGWR | マスタ。ワーカーへの割り振り |
LG00 〜 LGnn | 並列書き込みワーカー |
LREG | リスナー登録 |
COMMIT との関係
SQL の COMMIT はユーザー視点で「結果が永続化された」ことを意味しますが、その裏では LGWR がREDO をディスクに書き終えるのを待つ動作になります。この待機が V$SESSION_WAIT で log file sync イベントとして観測されます。
監視 SQL
-- LGWR プロセスの存在確認
SELECT pname, pid, spid, program
FROM v$process
WHERE pname IN ('LGWR') OR pname LIKE 'LG%';
-- log file sync 待機(COMMIT 待ち)
SELECT event, total_waits, time_waited
FROM v$system_event
WHERE event IN ('log file sync', 'log file parallel write');
-- REDO の書き込み統計
SELECT name, value
FROM v$sysstat
WHERE name IN ('redo writes', 'redo blocks written', 'redo size');
-- オンライン REDO ログの状況
SELECT group#, status, bytes/1024/1024 AS mb, members
FROM v$log;
同期 / 非同期コミット
Oracle のデフォルト挙動は同期コミットで、COMMIT 文を発行したユーザは LGWR が REDO をディスクへ書き終えるまで待たされます。これがトランザクション数の多い OLTP では log file sync 待機として現れます。COMMIT_WRITE = BATCH, NOWAIT を指定すると非同期コミットになり、ユーザは LGWR の完了を待たずに次の処理へ進めます。ただしインスタンス障害時に直近のコミットが失われる可能性があるため、金融系のような絶対に失えない処理では使用しません。一般的な業務系で大量のバッチ更新を流すときに、レスポンスタイム短縮目的で部分的に採用します。
関連パラメータ
| パラメータ | 説明 |
|---|---|
COMMIT_WRITE | IMMEDIATE / BATCH × WAIT / NOWAIT の組合せでコミット書き込み挙動を制御 |
LOG_BUFFER | REDO ログバッファのサイズ。12c 以降は自動調整 |
DB_WRITER_PROCESSES | DBWR の並列度(LGWR とは別だが連動) |
FAST_START_MTTR_TARGET | インスタンスリカバリの目標時間。チェックポイント頻度に影響 |
チューニングの観点
- log file sync が長い → REDO ログファイルを高速ディスク(SSD)に配置
- OLTP で COMMIT 数が多い →
COMMIT_WRITE = BATCH, NOWAITも検討(耐障害性とトレードオフ) - REDO ログサイズが小さい → ログスイッチ多発でアーカイブ負荷増。100 MB 〜 数 GB に拡大
- RAC では LGWR の並列化と専用ディスクの I/O 性能が特に重要
他のバックグラウンドプロセスとの違い
| プロセス | 役割 |
|---|---|
| LGWR | REDO ログバッファ → REDO ログファイル |
| DBWR | データベースバッファ → データファイル |
| CKPT | チェックポイント情報の更新 |
| SMON | システムモニタ。インスタンスリカバリ |
| PMON | プロセスモニタ。クライアントの切断処理 |
| ARCn | REDO ログをアーカイブログにコピー |
障害時の挙動
LGWR が異常終了すると Oracle インスタンスは即座にクラッシュします(必須プロセスのため)。再起動時に SMON によるインスタンスリカバリが走り、REDO ログから未反映の変更を再適用してデータベースを整合状態に戻します。
まとめ
- LGWR は REDO ログバッファ → REDO ログファイルを担当する必須プロセス
- COMMIT / 3 秒 / 1 MB / 1/3 / DBWR 前 などの複数トリガで動く
- Write Ahead Logging により耐障害性を保証
- 12c 以降は 並列 LGWR でスケーラブル
- 監視は
log file sync待機とv$sysstatで
関連
- DBWR — データベースライター
- CKPT — チェックポイントプロセス
- SMON — システムモニタ
- REDO ログ — 再実行情報を記録するログ
- インスタンスリカバリ — クラッシュ後の自動復旧
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?