• ベストアンサー

アクセス負荷の分散

こんにちは。 あるクライアントから大量データでテーブル参照/更新をかける処理を実行し、高負荷がかかると、他のクライアントからはテーブルへアクセスが全く出来ない状態になってしまいます。 (その処理が終了すれば、アクセスできるようになります) このような状態を回避し、大量データ処理中であっても他のクライアントからのアクセスが可能となるような解決方法はあるのでしょうか?(もちろんパフォーマンスは落ちるとは思いますが) 素人質問で申し訳ありませんが、解決法をご存知の方がいらっしゃいましたらご回答をお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

単一のトランザクション内に多数のレコード更新があると、場合によっては更新するレコード数よりはるかに多い数のレコードがロックされ、そのトランザクションが終了するまで問い合わせができない場合があります。これはSQL Serverが持つ弱点の1つです。 単一の大きな、長時間を要する更新トランザクションのかわりに、小さな更新トランザクションに分割することが可能であれば、そうすることで、レコードがロックされている時間を短くすることができます。 そういう見直しが難しい場合は、SQL Serverの設定で「レコードロックからページロックへの移行」のパラメータを変更し、できるだけページロックに移行しないように設定すると、若干は状況が改善される可能性があります。 ただし、レコードロックからページロックへの移行は更新トランザクションのパフォーマンス向上のために行うことで、ページロックへの移行を少なくすると更新トランザクションのパフォーマンスが落ちる可能性があります。 それにより更新トランザクションの実行時間が長くなるとレコードロックされる時間も長くなるので、逆に問い合わせのパフォーマンスが落ちる可能性もあります。 パラメータを変更する場合には、いろいろパラメータを振って、どの程度影響があるか確かめてみてください。 それから、考慮の順番としては逆かもしれませんが、可能であればSQL Serverに使わせるメモリの量を増やしてみてください。大きなトランザクションでも、うまくキャッシュメモリに入れば高速に処理を完了することができますので。

関連するQ&A

  • 大量データ削除中の他処理のパフォーマンスについて

    初心者DBAです。 現在、大量データを削除している裏で別テーブルに対する更新処理のパフォーマンス影響について調べています。 自分が調べた限りではディスクアクセス負荷ぐらいしかパフォーマンスに影響を与える要因はないと考えています。 もし、他にパフォーマンスに影響を与える要因がありましたら教えて頂けると幸いです。 宜しくお願いいたします。

  • Windowsサーバーの負荷

    1台のWindows2003ファイルサーバー内の2つのフォルダを1台のWinodwsXPクライアントの2つのネットワークドライブとしてマウントしています。 このようなクライアントが100台以上ある環境下で、WindowsXPクライアント上のユーザ100人が上記2つのネットワークドライブ間でファイルやフォルダを1時間程度かかる大量コピーを一斉に実行した場合にどのような影響があるかわからずに困っています。 (1)ネットワークに負荷がかかるでしょうか? (2)もしネットワークに負荷がかからないとしてもサーバーのネットワーク機能に大きな影響があるでしょうか? (3)あらかじめパフォーマンスモニタで調査するとしたらCPU、ディスク、ネットワークそれぞれどのような項目データを取得したらよいでしょうか? おわかりになる方がいらっしゃいましたら是非お願いいたします。

  • キャッシュとサーバ負荷について

    今までキャッシュを読み込む処理は、ブラウザの表示速度が上がる・サーバの負荷が軽減されると思っていました。 けれど最近「キャッシュを読み込むにしろ読み込まないにしろ、オンライン状態の場合一度サーバにデータの更新日時を問い合わせてキャッシュのデータよりも新しいデータがサーバにアップされていないかどうかを確認するので、サーバの負荷には関係ない」という文書を目にして、少々混乱気味です。 結局どちらの情報が正しいのでしょうか? また、クライアントのアクセス回数が非常に多く、ブラウザの表示が数秒間真っ白になる状態が起こるシステムなのでなるべくサーバの負荷を減らしたいと思っています。 キャッシュが関係なく、システム自体に問題が無いとすればこれ以上サーバの負荷は減らしようがないのでしょうか? 何だか漠然とした書き方ですが、御存知の方、回答お願いします。

  • Access のリンクテーブルについて

    よろしくお願い致します。 Access側から外部テーブルを参照したリンクテーブルを作成しました。 しかしそのテーブルを開くのにはすごく時間がかかり、時にAccessが応答なしの状態になったりします。 そこで、ためしにテーブル作成クエリでリンクテーブルのデータと同じデータをもつテーブルを作成しました。 すると、そのクエリで作成したテーブルからの操作はスムーズに行われました。リンクテーブルとはデータ量も同じなのにこのように重さの違いがでるのはなぜなのでしょうか? Accessを使いはじめたばかりで、裏ではどのようになっているのかよくわからずパフォーマンスのあげ方に四苦八苦しております。 アドバイスをよろしくお願いします。

  • Accessのデータ共有について

    現在社内の顧客管理システムをAccessにて構築しており、データテーブルファイル(mdb)をファイルサーバに置き、クライアントPCはフォームやクエリだけのmdbを使用してテーブルのリンクでデータ共有しています(Accessのデータ分割ツールにてテーブルとフォーム、クエリを分離しただけの状態で運用しています)。これまでは、この状態でも運用出来ていましたが、データ量が多くなるにつれ、段々動作が重くなってきた為、処理速度改善の為に、以下の二案を検討していますが、どちらの案が効果的なのでしょうか? 【案1】 クライアント用mdbファイルに同じテーブル構成の一時テーブルを作成し、mdbファイル起動時と、「更新」ボタンを別途作成し、「更新」ボタンが押下されたタイミングで、ファイルサーバのデータベースからADOにて一時テーブルに全データを読み込む。更新系の処理は、各クライアントの一時テーブルとファイルサーバのデータベースに対して行う。 【案2】 現状フォームの遷移については、 「DoCmd.OpenForm」関数の引数に検索条件を指定する方法で行っている為、この部分を ・ADOにてデータを取得  ↓ ・遷移後のフォームに値をセット と言った処理に変更する。 また、上記以外の方法で何か良い方法がありましたらご指摘頂ければと思いますので、よろしくお願いします。

  • Accessで該当データにフラグをたてたい

    大量データのマッチング処理を行っています。 (1)編集データ:8万件 (2)参照データ:40万件 Excelでは処理が遅いため、Accessで対応しようとしています。 (1)と(2)のデータに対し 不一致クエリを実行すると、データが絞り込まれてしまいますが 絞り込まず、別カラムを作成し、対象データに対しフラグをたてたいのですが 方法を教えていただけないでしょうか。 マクロを組まないとできませんか? 申し訳ありませんがどうぞ宜しくお願いいたします。 Accessのバージョンは、2007になります。

  • Accessのクエリについて

    Accessの初心者です。 “クエリ”がよくわからなくて困っています。 (1)テーブルの情報を更新した場合、クエリも自動で内容が更新するのでしょうか? 複数のクエリがある場合、テーブル更新後すぐにアクセスを閉じて、次にアクセスを起動させた時はクエリの内容も更新されるか。 それとも、テーブル更新後に各クエリを実行しないと更新しないとでしょうか。 (2)クエリ実行後、表示されたデータの一部を書き換えて出力した場合、元のテーブルの内容も変更されてしまうのでしょうか。 教えてください。 どうぞよろしくお願い致します。

  • CPU負荷分散先のServerをなんと呼ぶ?

    半導体設計Dataを開発するサーバのH/W構成を調査しています。 シミュレーション、コンパイルの際、サーバ一負荷を回避するため、 演算処理を他のサーバのCPUで代行しています。 この「演算を代行している」サーバをなんと呼ぶでしょうか? 「キャッシュサーバ」「演算サーバ」とか適当にネーミングしていますが、 他の一般的に使われている名称があるのでしょうか。 検索しても見つけられず、投稿してしまいました。 おつきあいくだされば幸いです。

  • MS Accessを共有した際にファイルが壊れるのを回避する方法

    ちょっとしたツールをAccessで開発したいのですが、 Accessファイルを共有するとファイルが頻繁に壊れると伺いました。 そこで以下のような回避策を考えてみたのですが、 効果はありますでしょうか。 これでは、あまり意味がないとか、他に注意したほうが良い点等ありましたら、アドバイスいただければと思います。 なお、ツールは、50名位が使用(同時アクセスは3名~4名程度)予定で、 サーバ上にメインのmdbファイル(以下「サーバmdb」)を、各クライアントにもそれと連携するmdbファイル(以下「クライアントmdb」)を置くことを想定しています。 (1) データは全てサーバmdbで保持する。クライアントmdbには、入力用のフォームと、サーバmdbから取得したデータを一時的に保持するテンポラリのテーブルを持つ。 (2) クライアントmdbからサーバmdbにアクセスし、必要なデータをクライアントmdbにインポートする。 (3) クライアントmdbで、取り込んでデータをもとに、データの追加・修正を行い、当該データをサーバの所定のディレクトリにCSVで出力する (4) サーバmdbは、日次で、所定のディレクトに配置された、クライアントmdbから出力されたファイルを読み込み、データを更新する (5) (4)の読込み・更新作業中は、クライアントmdbからサーバmdbにはアクセスしない(外部ファイルで制御) 以上です。 要は、クライアントmdbが、直接サーバmdbを更新しないようにし、参照のみにするということです。 よろしくお願いします。

  • mysql負荷の問題解決

    mysqlの参照の負荷の問題解決はスレーブが有効だがmysqlの登録・更新の負荷の問題解決は何が有効なのでしょうか

    • ベストアンサー
    • MySQL