2021-02-07 用課題¶
- 先に進む前に録画してあるか確認しよう
進捗¶
- 前回の進捗
- 基礎知識編:「参考:楽観ロック」まで
- 本編:04-02終了
- 今回の進捗
- 基礎知識編:「6.8.4 問合せ処理の効率化」まで
- 本編:05-01終了
課題¶
- オリジナルコンテンツへのリンク
- 勉強会のコンテンツまとめ:GitHub へのリンク
- matplotlib を忘れないように、簡単なグラフをいくつか描いてみてください。
- TeX でいろいろな式を書いてみましょう。
- 勉強の日常組み込み系
- Julia:The Little Book of Julia Algorithmsを読んでみることにしました。適当に話します。
- そのうち取り組む事案:黒木さんの Julia での統計ネタ
- 応用情報の本を一日2ページくらい眺めてみてください。毎日やれば大体 1 年で読み終わります。
TODO¶
- AWS のハンズオン
- 公式のハンズオン: 無料でできるハンズオンもたくさんある
- 東大の AWS クラウド講義資料を眺めてみてください。せっかくなので状況を見て(私の勉強も兼ねて)「勉強会前半パート」で取り上げようと思います。(とりあえず当面はやらない感じにする?)
- 面白そう:Julia での機械学習アルゴリズム本
- Algorithms for Optimization by Mykel J. Kochenderfer and Tim A. Wheeler @mitpress
* 自分用メモ¶
- 遅延型方程式に対するコメント追加
- matplotlib のチュートリアルを読もうの会
- 公式情報に触れる重要性
- 古い情報が古いと書いてあったりする:たとえば
pylab
- Gallery
- 見ていて面白い
- 「どこをいじるとどう変わるか」が視覚的にわかる
- 公式情報なのできちんとアップデートしてくれている(はず)
- 公式情報にソースがあるので自分でいろいろ書き換えていて破滅したとき、必ずオリジナルを復元できる
- 実際に競プロの問題をいくつか解いてみましょう。
* Matplotlib¶
- 本当に簡単な図を描く
- これを参考に scipy お絵描き
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
日々の勉強¶
Julia¶
- The Little Book of Julia Algorithms
- リポジトリの対象ディレクトリ:ここ
- その他参考
IT 基礎知識¶
- 応用情報の本を一日2ページくらい眺めてみてください。毎日やれば大体 1 年で読み終わります。
- ネットワークの話もいい加減飽きたので、しばらく DB の話
復習¶
- 3 つのスキーマ
- ユーザーが見るレベル
- 正規化などをかけておいたデータベースにもっていけるレベル
- 個々のデータベースに合わせた具体的なレベル
- インメモリの DB:コンピューターの基本的なハードウェア構成と意味を復習しよう
本の記述を追いかける¶
P.336 障害回復管理¶
P.336 障害の種類¶
- データベースに発生する障害の三大分類
- 媒体障害:記憶媒体の故障でデータが消失
- システム障害:DBMSやOSのバグ・オペレータの誤操作によるシステムダウン
- トランザクション障害:プログラムのバグ・デッドロック発生でのトランザクションの強制終了など、実行中のトランザクションが異常終了
P.336 目標復旧時点¶
- RPO:Recovery Point Objective
- システム再稼働時に障害発生前のどの時点の状態に復旧させるかを示す概念で、データ損失の最大許容範囲
- 目標復旧時間(RTO、Recovery Time Objective)
- 災害による業務の停止が深刻な被害とならないために許容される時間
P.336 事前対策¶
- 障害回復:障害からデータベースを復旧して一貫性が保たれた元の状態に戻すこと
- 障害回復には次のファイルを事前に取得しておく必要がある
- ログファイル
- 障害やバグ対策の基本
- トランザクション処理でデータベースが更新されるとき,更新前ログ、更新後ログなどの更新履歴(変更情報)を取り、時系列に記録する
- ジャーナルファイル、ジャーナルログともいう
- 大量に出るので復旧や原因追及に必要十分な要素をピックアップする必要がある
- ログファイル容量などを見て自動でファイルが切り替わる(ローテーション)
- バックアップファイル
- 媒体障害に備えてデータベースとログファイルを定期的に別の媒体にバックアップ(退避)する
- データベースのバックアップは定期的に取る
- ログファイル切り替え時にログファイルのバックアップも取る
- ふつうn個のログファイルに対してログデータをログファイル1から順に書き込む
- ログファイル1が一杯になるとログファイル2へと切り替える(ローテーション)
- このタイミングでバックアップ
P.337 参考 バックアップの種類¶
- フルバックアップ:すべてのデータをバックアップする
- 差分バックアップ:直前のフルバックアップ からの変更分だけをバックアップする。
- 増分バックアップ:直前のフルバックアップ または増分バックアップからの変更分だけをバックアップする。
- メリット・デメリット
- フルバックアップは何も考えずにドカンと復旧できるが容量を食う
- 差分バックアップはバックアップに使う容量を減らせるが、復旧時に手間がかかる
P.337 媒体障害からの回復¶
- 媒体障害発生時:バックアップファイルとログファイルの更新後ログを使ってロールフォワード処理でデータ ベースを回復させる
- 参考:P.338 図6.8.6
- T1:バックアップファイル取得
- T2:媒体障害発生
- バックアップファイルを別の媒体にリストア、T1時点に復帰
- T1-T2間の更新データ回復:ログファイルの更新後ログによるデータベースの各レコードを順番に再現するロールフォワード処理
- 参考:差分バックアップ方式採用時
- フルバックアップファイルをリストア
- 直近の差分バックアップファイルのデータを追加
- 更新後ログでロールフォワード
P.338 トランザクション障害からの回復¶
- アプリケーションプログラムのバグやデッドロックを解除するための強制終了などでアプリケーションが異常終了したとき
- ログファイルの更新前ログを使ったロールバック処理でデータベースの内容をトランザクション開始時点の状態に戻す
- 参考:P.338 図6.8.7
- データxとyを更新しなければならないトランザクションがT1で開始
- データyの更新を行う前にT2で異常終了
- このままではデータxとyのつじつまが合わない
- T1からT2の間に行われたxの更新を取り消す必要が出る
- ログファイルの更新前ログによるロールバック処理 でトランザクション開始時点(T1)の状態に戻す
- 参考:データとログをメモリ上にバッファリングしている場合
- まだCOMMITされていないトランザクションはログ・バッファの内容で自動的にロールバック(ROLLBACK)される
P.339 システム障害からの回復¶
- 現在のデータベース管理システムでのディスクの入出力効率向上のための工夫
- データとログをメモリ上にバッファリング
- まずデータベース・バッファに対してデータの更新
- ある時間間隔でデータベース・バッファの内容をデータファイル(データベース)へ書き出す
- 書き出し時点を行った時点:チェックポイント
- チェックポイントの発生:トランザクションのCOMMITとは非同期で、トランザクションがCOMMITされてもデータベース・バッファの内容はデータファイルに書き出されない
- チェックポイント発生時、稼働中のトランザクション情報もログファイルに書き出される
ログ・バッファの内容¶
- トランザクションのCOMMITまたはチェックポイント発生でログファイルに書き出される
- システム障害発生時の問題
- データファイルに書き出されていないデータベース・バッファ上の更新データの消失
- P.340 図6.8.9 の TR2
- システム障害が発生した時点でCOMMITされていない
- データベース・バッファの内容が消失しても問題ない:再処理で対応
- 問題になるのはチェックポイント(T1)の前に開始されたTR1
- TR1はシステム再立上げ後に更新前ログを用いたロールバック処理で
- トランザクション開始時点の内容に戻す
図6.8.10の例¶
- チェックポイント(T1)後
- システム障害発生(T2)前にCOMMITされたトランザクションTR3,TR4による更新内容はまだデータファイルに書き出されていない
- システム障害が発生した直前のチェックポイント(T1)まではデータベースの内容が保証されている
- ここから更新後ログを用いてロールフォワード処理によって回復
- システム障害における障害回復はシステム障害 発生時のトランザクションの状態に応じて変わる
- チェックポイントを作ることでそれまで行われてきた更新内容はすべてデータベース・バッファからデータファイルに書き出される
- システム障害が発生してもチェックポイント以降の更新後ログだけでロールフォワード処理で回復できる
- 回復時間が短縮される