パソコン情報

SQLserverとAccess接続の動作が遅い原因

Pete LinforthによるPixabayからの画像

SQLServerに、端末としてAccessを接続して作業をしていると、動作が遅い場合がある。

 

注意ポイント

いったい、その原因は何なのでしょうか?

注意ポイント

回避する方法はあるのでしょうか?

 

 

Accessの動作が遅い原因

スタンドアロンで、パソコン1台でAccessを使っているなら、ただ単にマシンスペックを上げればAccessは早く動作するかと思いますが、Server&Clientで利用している場合は、動作が遅い原因は他にある場合がある。

ネットワークによる原因

動作が遅い原因としては、

ココに注意

ネットワークによる遅延の場合

がある。

同じLAN環境であっても、LAN環境内のトラフィックの混雑によりスムーズにデータ通信ができてないのが原因の場合もあります。

さらに詳しく(トラフィック)

通信の分野におけるトラフィックとは、インターネットやLANなどのコンピューターなどの通信回線において、一定時間内にネットワーク上で転送されるデータ量のことを意味します。

また、VPNなどで接続している場合も同じ理由から、インターネット回線のトラフィック増大であったり、VPN通信内のトラフィック問題であったりする場合があります。

 

参考

ネットワークによる問題は、通信環境を改善するしか方法がありません。

 

通信環境の改善方法は、また別の機会にすることとして、それ以外の問題を改善することで、実際にSQLserverとAccess間のデータ通信量を減らせる方法があります。

 

 

Accessデータ処理の問題

 

どうもAccessというソフトは、スタンドアロンで使う事が前提にあるようで、1台のパソコンでの利用では、テーブル(データ)も1台のパソコンの中にあるので、何も考えずに、どんどんクエリなども作成して処理をするようにプログラムしていけば、目的のデータベースシステムは出来上がってしまいます。

 

しかし、SQLserver側にデータを置いて、Access側でリンクテーブルを貼りアクセス側でクエリを増やしていくと、

 

ココに注意

突然Accessの動作が鈍く

 

なっていきました。

SQLserverってのは、遅くならない仕組みじゃないのかよって思っていましたが万能ではないようですね。

 

 

どうも調べてみると、Accessは、クエリにしてもテーブルデータにしても、

 

注意ポイント

いったんSQLserverからローカルPCにデータを引っ張ってきて計算をしている

 

そうなのです。

つまり、SQLserverなどでViewなどで絞ったデータも、リンクテーブルで貼ることで、そのデータを使う時は、ローカルにもってきてから計算しているらしいのです。それじゃ、マシンパワーも使うし、ネットワークのトラフィックも込みますね。

 

 

 

動作遅延を回避する方法

フォームはできる限り非連結フォームで対応

 

SQLserverからリンクテーブルを貼って、それをフォームにしてしまったら、フォームを開くたびに、SQLserverからテーブルのデータ全てを、ローカルのパソコン上に引き込むというデータ通信が発生するようです。

 

フォームが非連結なら、その手順が必要なく、データ追加や更新時でも、非連結フォームから、IntoやUpdateで行えば、ネットワークに流れるデータ通信量は少なくて済むという訳です。

 

ココがおすすめ

フォームはできる限り非連結で作成する

 

また、別の方法でサーバー側の機能でストアドを使って処理するという方法もあるようですが、私自身がそこまでスキルがないので、非連結にて対応しています。

 

パススルークエリを使って対応

 

このパススルークエリというのは、Accessでのクエリ処理のような事を、SQLserverにやらせてしまうとう機能です。

 

つまり、クエリは、テーブルの数値を計算したり、検索や、抽出することが可能である訳ですが、

 

ココがおすすめ

その結果だけをデータ通信するので動作が早くなる

 

って訳です。

 

 

パススルークエリってのは、設定するのが本当に簡単です。

ココがポイント

SQLserverで作成したViewのクエリをそのままコピーするだけ

でパススルークエリになります。スピードアップしたViewのようなものです。

 

※画像付きの詳細のやり方は、別記事にて説明したいと思います。

 

 

ぜひ、SQLserver&Access構成で動作が遅い場合は、「フォームを非連結にする」ことと、「パススルークエリを使う」ことを試してみてください。