管理と運用
◆情報検索精度の検査
- 「再現率」=「検索された全文献中で質問に合致した文献数」
÷「文献ファイルの中で質問に合致する文献数」
- 「適合率」=「検索された全文献中で質問に合致した文献数」
÷「検索された全文献数」
- 「文献ファイルの中で質問に合致する文献数」を正確に把握することは
難しく、「再現率」は概念的なものである。
- 検索条件を厳しくすると、
質問に叶うデータのみが選択されて「適合率は上がる」が、
検索漏れが生じやすくなり「再現率は下がる」。
- 検索条件を緩くすると、
質問に関係ないデータまで選択されて「適合率は下がる」が、
実際に欲しいデータまで削られることは少なくなり「再現率は上がる」。
◆データベースのシステム監視
- 稼動状況監視
- 利用者のデータベース利用状況監視
- 性能監視
◆データベースの性能チューニング
- 索引を増やせば様々な問合せに高速に応答するが、
更新にはそれだけ時間を要するようになる。
経験則的に、索引の数は3〜4つが良いと言われている。
- データベースの索引が有効でないキーについての
問合せが集中して全件検索が多発するような場合には、
データベースを水平分割すると良い。
これにより、障害時の被害が局限される、というメリットも生じる。
- 待ち行列モデルM/M/1
平均待ち時間={利用率÷(1-利用率)} × 平均サービス時間
どーゆー意味があるかは分からないけれども、
とりあえずこの式は、以下のような性質を持っている。
- 利用率が0、つまり、全然トランザクションが発生していない時は、
平均待ち時間も0になる。(すぐにサービスを受けられる。)
- 利用率が0.5、つまり、サーバーがトランザクション処理を
している確率と、何もせず待機状態である確率が丁度半々の時には、
平均待ち時間は平均サービス時間と同じになる。
- 利用率が1、つまり、サーバーは常に処理をしっぱなしの時は、
平均待ち時間は∞(無限大)となる。サーバーは目一杯働き続けている以上、
いつまで待ってもサービスが受けられない、という感じかな。
◆データベースの排他方式
複数のトランザクションが同時進行すると、
データ更新に不整合が起きることががる。
例えば、排他管理をしていないと、預金残高が1,000円の口座に対して、
2つの自動引き出し機から800円ずつ引き落とした場合、
それが全く同時ならば、どちらの処理でも預金残高は1,000円であると見えてしまい、
どちらの引き落としも成功してしまう。
結果的にはどちらかの更新処理が残らないことになってしまうため、
これを更新紛失と言う。
更新紛失を発生させないための排他方式としては以下のものがある。
- レコードロック方式
あるプログラムがレコードを処理中は、
そのレコードにアクセスしようとしている他のプログラムを待たせる方式。
デッドロックが起こる可能性がある。
- タイムスタンプ方式
プログラムを待たせることはしない。
読み取り、書き込み時間を記録することで、他のプログラムと競合が起きそうな
場合には書き込みをやめる、といった方式。
分散環境では時刻の一元管理は極めて難しいため向かない。
- 楽観的方式
トランザクション開始時にデータのコピーを取っておき、
更新時に他のトランザクションとのデータ更新の重複が無いかを
データ内容に基づいて調べる。ロックもタイムスタンプも取らない。