プロが教えるわが家の防犯対策術!

accessからsqlserverへの移行について!

accessからsqlserverへの移行することにしました。
問題が起きないよう先日質問させて頂いた内容でもう少し詳しく教えてください。

以下が前回の内容です。編集をしています。

accessの処理はそのままでDBをsqlserverからODBCでリンクしようと思います。
現在の運用環境はサーバは使用せずファイル共有で4台のPCで運用しています。OSはWinXPです。
現在のマシンは4台とも3年前に購入したPentiumの2.40GHzメモリは2GBです。
今回も専用サーバは使用せず現在のPCにSQLServer2005無料を使用と思っています。
データ件数は約3万件で必要な項目にはインデックスを付けてリレーションも張っています。

計算項目が多く定義と参照項目含め約300項目となり、クエリーをNo.1とNo.2の2個のに分けています。
クエリーはデータやマスタとリンクしています、No.2はNo.1の式の値を使用し計算しています。
計算式は複雑なものや計算結果⇒計算結果⇒・・・・となっています。

入力画面はレスポンスが遅く、単票印刷で約30件の処理に5~10分位かかるものがあります。
印刷はワークテーブルに必要項目を出力する等をやって見ましたが改善しませんでした。抽出に時間がかかっています。

DBをsqlserverに移行することで処理速度の改善はどの程度見込めるのでしょうか。
計算項目数が多いのであまり見込めないのではと思っています。


頂いた回答です。

>それら複数のテーブルをサーバーに置いてリンクテーブルにし、従来通りのクエリーをそのまま使った場合は、確実に遅くなります。
?これはsqlserverのデータをリンクしクエリーはそのままにしたら遅くなるのでしょうか。
 対象方法はsqlserverにクエリーをVIEWで定義すればいいでしょうか。対処方法を教えてください。
>高速化にはそれなりのテクニックが必要です。
?参考になるサイトがあれば教えてください。


>やはり抽出に時間がかかりあまり改善しませんとのことですので、計算式なしで[select * from ...等]にしてみて流してみてください。
?早くなった場合必要な値はどの様にして取得しているのでしょうか。


>やはり、エンジンを置くPCの性能がカギで、これが遅いのでは期待はできないとしたものです。聞けば同じマシンで代替するとのことなので、あまり期待しない方がよい
と思います。
?サーバを設置しサーバOSにするとにより処理速度はかなり速くなるのでしょうか。
 専用サーバも高価なものは買えないので現在のPCと同等程度の性能となります。

よろしくお願いします。

A 回答 (3件)

例えばOSをWindows2003ServerR2に替えても


処理速度は変わりません。エンジンとハードが
同じならです。
>ODBC接続時でリンク
止めた方がいいです。それよりパススルークエリを
使うべきです。これはJet(Access)のエンジンを
通らないで、直接SQLがサーバに届きますので高速
です。SQL文法はSqlServerのものを使います。

テクニックですが、方法としては以下の通りです。
(1)ストアドプロシージャを使う
 決まった計算や抽出があれば予め登録しておくことで
 同的にSQLを解釈するより速く処理できます。
(2)一時テーブルを使う
 クエリを分けて実行するとありましたが、Accessと
 異なり、データを絞る、計算して更新する、など
 連綿と続くクエリを1回で処理できます。この時、
 繋ぎのデータを保持しておくのに一時テーブルを使い
 ます。実行回数(DBエンジンへの要求)を減らせる
 ので、かなり速度の改善が見込めます。

この回答への補足

回答有難うございます。

ストアドプロシージャや一時テーブルは初めてなので出来ることからやってみます。

補足日時:2010/08/30 10:48
    • good
    • 0

遅い原因を特定してから対応しないと改善は見込めません。



・計算式抜きで抽出してみることで計算式が問題かどうかを判断する。

・計算式が問題の場合
 Accessを使用してもSQL Serverを使用してもクライアント側の問題なのでAccessを修正する。
 クエリ経由ではなくSQLを使用してデータを取得しVBA内で計算させる、等々。
 ※このあたりは実装がわからないとなんとも言えません。

 ・計算式が問題ではない場合
  抽出が遅い場合は、その原因を追求します。
 ・索引が本当に使われているかを確認する。
  検索項目のデータ型が一致しているか、条件指定に関数を使用していないか。
 ・データ件数を確認する。
  ジョインが間違っていてデータ件数が増えていないか。
 ・多段のクエリのあとの方で条件指定を行っており一段目の戻す件数が多くないか。
  条件を変更して元のクエリで件数を絞り込みができないか。

とにかく各ステップで掛かっている時間を計算して、どこが問題点かを調査してください。

単純にDBをAccessからSQL Serverに変えるのはリスクが高いです。
原因を調査した上で、ここを変えれば速くなると確証を得てから作業をしてください。

この回答への補足

回答有難うございます。

一つづつやって見ます。

補足日時:2010/08/30 10:50
    • good
    • 0

3年ほど前にAccessアップサイジングウィザードを使用してSQL Serverへ移行しました。


結論は圧倒的に速度アップしました。VPNを通じて2拠点間で単純なフォームを開くのに
3分程度要していたものが、瞬時に開くようなりました。テーブルとクエリはSQL側に
フォーム、レポートとモジュールはAccess側に置いています。クエリはSQLだとビュー、
ストアドプロシージャ、テーブル値関数になります。Access.mdbの場合クエリを実行
する際、サーバからクライアントにクエリに関連するテーブルの値をダウンロードして
きます。またクエリ実行中もサーバとの同期を取りながら計算しているため時間が
かかります。Access.adpの場合はクエリの結果のみを受け取るためサーバの処理速度
に依存することになります。
3年前はSQLは全く知りませんでしたし、今も高速化のテクニックなど知りません。
使用しているサーバはDELLのPowerEdge840です。サーバ専用機を使用するメリットは
24時間365日稼動が前提として製作されているので信頼性が高いという点だと思っています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す