skillup

技術ブログ

Database

アンチパターン トランザクションスコープ+大量データのリアルタイム集計+接続が詰まる

投稿日:

本日は主にインフラの設計的なことに関して。

トランザクションスコープの設定

トランザクション(一回の処理)が大きすぎる

デメリット

  • レスポンスが悪い
  • 障害の時に余計に待たされたり、エラーになったりすることがある
  • 非同期だと、ユーザーには成功したという表示がでるのに、実際には処理が落ちている・・ということがあり得る

対策

  • 普段からプログラムをわかりやすく書く(主にコントローラーの部分に処理を集中させればどれがどれかわからない・・・という状態は防げる)
  • 1リクエストでの処理=トランザクションにする(現在業務で使っているアプリは自動的にこれ。かならず1リクエスト=1トランザクションになる。どれがどれだかわからない・・・という状態は防げる)
  • 1リクエストにいろいろな処理をいれすぎず、不要な処理は省く
  • 継ぎ足しでシステムを構築しない
  • キューイングシステムなどの構築

大量データのリアルタイム集計

なんでもかんでもリアルタイムにデータ集計をさせる。ユーザーの要求をいわれるがままにきき、処理量を考慮できていないことが多い。

デメリット

  • 画面表示が遅い
  • SQLが重くレスポンスが返ってこない→ユーザーがボタン連打→さらに遅くなる

対策

  • 最初の段階で大量データでのテストを行う
  • 非正規化などの集計テーブル(ビューも考慮に入れる)を使う
  • トリガーなどを使い、元データが更新された場合自動的に非正規化された表を反映させる
  • 多重処理(いくつもの処理を同時に行う)をやっていない
  • バッチなどで回せる場合は、複雑な処理をバッチに回す

詰まると接続が増えるアーキテクチャ

ある1つの接続がつまり、続いて別の接続がつまり・・というように連鎖反応を起こすシステム。負荷系の障害であり、再現しないタイプのもののため難易度は高め

デメリット

  • DBへの接続数が異常になり、遅くなる
  • 原因がネットワーク不良やIOの遅延など判別しにくく、わからないことが多い

対策

  • 性能テスト(同時に接続数を増やすようなテスト)を行う
  • コネクションプールの理解
  • 接続数の上限を設定しておく

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

cakePHPでのマイグレーション

開発を続けているとデータベースのカラムの構造が変更するってことはしょっちゅうですが、管理がいい加減だとメンバー間でテーブルの構造が変わっていたり、本番と開発で違ってくるなどのトラブルが続出します。 そ …

no image

データベースのインデックスについて

今回はデータベースのインデックスに関して。 検索条件を早くする場合、何よりも速度が速くなるのはインデックスを張ることでしょう。 インデックスを張ることは単語を索引順に並べることですので、劇的に速度が向 …

no image

slow-query-logについて

データベースを伴う部分でののチューニングですが、大きく分けると SQLを書き直す インデックスを張りなおす プログラム内部でキャッシュを有効化する 設定ファイルの修正 上記のようなかんじになるのではな …

no image

アンチパターン バインド変数の未使用+直積組み合わせ+データ量爆発+インデックス関連

本日はSQLコーディングに関して。 ここら辺は実際にプログラムを書く際に重要になってくるネタ。 Contents1 バインド変数1.1 デメリット1.2 対策2 直積により組み合わせが爆発する2.1 …

no image

MySQLでのlocalhostと127.0.0.1の違い

たまにMySQLでローカルのホストに接続する時に、localhostで接続するときと127.0.0.1で接続するときで挙動が違う(片方だとエラーになり、もう片方だとエラーにならない)などがあるのでちょ …