こんにちは。SQLServer2000の超初心者です。
SQLServer6.5をSQLServer2000にDBを変換したのですが
VB5.0で作成したプログラムからRDO経由でSELECT文を
送ると処理速度が異常に遅くなってしまって...
ちなみにACCESSにODBCでアタッチしたものにRDOで
SELECT文を送ると1秒以内に答えが返ってきます。
どの辺りを調べたらいいのか全く分りません...
どなたかご存知の方、よろしくお願い致します。
OSのバージョンはWin2000です。
RDO ですか・・・通常なら、ADO 使いますが・・・
マイクロソフトの技術情報には・・・
RDO
RDO は、ODBC の COM ラッパーです。ODBC は、C 言語ベースの API であり、汎用的な (異種データ ソース間での) データ アクセスを行うことができます。ただし、RDO では、データ アクセス用のコマンド言語として、SQL を使用する必要があります。
現時点では、Microsoft 社は RDO の今後の開発を計画していません。したがって、RDO ベースのデータ アクセス コントロールより、ADO ベースのデータ アクセス コントロールの使用をお勧めします。
とありました。
ADO をお使いなることをオススメします。
※ 折角、SQL Server 2000 にされたのですから、旧体環境から最新環境への
移行も必要なのでは?
実際のところ、VB5からVB6にアップしても高速化はあり程度は見込め
るのでは?
以上。
岡田 之仁さん、こんにちは。
ご回答有難うございます。
SQL Server 2000に変換したのは
5年くらい前にシステムを納入したユーザさんなのです。
プログラム本数が多すぎて、ADOに変換することは
ちょっと無理な状況で。。。
RDOのままではどうにもならないのでしょうか?
ちなみに・・・
SQL Server 6.5 から、SQL Server 7.0 にあげ、SQL Server 2000 に
アップされた場合と、一気に6.5 から2000にあげた場合とで、若干、
インデックスの構成に問題が出る可能性があります。
インデックスの再構築を行われてみては?
SQL Server 2000 には、インデックスをチューニングする等のツール
がついていますので、それを使用してみて、それでも速度が遅い場合は
やはりADOに変更されるのをオススメしますが・・・
SQLプロファイラといいますが、これでトレースを行い、その結果、
プロファイラ中のツールの中のインデックスチューニングウィザード
を行い、インデックスの再構成を行います。
私の場合、6.5から2000に一気に上げた仕事を行いましたが、RDO
で組まれた膨大な他社のソフトを、全てADOに書き換えました。
書き換え作業は、私の会社でやりましたが・・・当然、それなりの
費用が発生しす・・・ですが、速度的な問題は起きませんでした。
当然、インデックスのチューニングを行いましたし、HDD上の
デフラグメンテーションを解消する仕組みもサーバーに搭載させま
したので・・・因みに、4年前のお仕事でした・・・
ADOは、現在、2.8です。
SQL Server 2000 もSP3です。老婆心ながら・・・
以上。
こんにちは。
私の場合も6.5から2000に一気に上げました。
インデックスの再構築もしてみましたが
現状は変わりませんでした...
照合順序もうまく設定出来ていないのですが、
そういう事も関係しているのでしょうか?
ユーザさん側にADOへの書き換え費用を
請求できそうにも無く...
うぅ〜ん、困りました...
照合順序は、SELECT された後、レコードセットから読み出した
折に影響するだけで、SELECT を行う処理時間には、そうそう影響
は無いと思いますが・・・
オラクルと同様ではありませんが、SQL Server 2000もチューニング
的要素で高速に動作すると言う部分が出てきました。
が、今回のケース、VB5とRDOの組み合わせで、SQL Server の
性能を引き出せていない組み合わせになっているとしか思えません。
ユーザーさんに書き換え費用うんぬんの件はあると思いますが、性能
が出なければ仕方無い部分もあり・・・そこがネックになりますネ!
ですが、そこを知らないでやったソフト屋の責任を問われる場合も
当然あり・・・この場合、ソフト屋の責任になりそうですネ〜
どうされるかは、対ユーザーさんとの話し合いしかないでしょう。
膨大な修正点数でも、SQLを発行するに、
1. DBオープン(コネクション)
2. SQLコマンド作成
3. レコードセット取得(SQL実行)
4. アプリ処理
5. レコードセットクローズ
6. DBクローズ
おおまかにには、このような手順です。
この中で、1.2.6.項は、必ず必要ですので、定型でかけます。
SELECT 以外は、レコードセットを必要としない書き方ができます
ので、これも定型化可能だと思います。
SELECT 用にどの程度の種類(テーブルや条件)があるかを整理す
れば、案外、実際のコーディングは圧縮可能だと思います。
モジュール化やクラス化して、あとは膨大な箇所に対し、チクチク
と修正作業を行えば・・・
ご検討下さい。
以上。
ちなみに・・・
SQL Server 2000 には限りませんが、ストアドプロシージャや
JOB化して定型化するのも手です・・・
VBのコードの膨大さにばかり目を奪われていては本質を逃す
場合もあるのでは・・・
作業工数が減少する可能性を先に算定した方が、よいのでは
ないでしょうか?
以上。
あ、ひとつ忘れていました・・・
SQL Server 2000 をインストールされた後、SQL Server 2000自体
の設定ですが、割り当てメモリの容量と、ワーカースレッド数や
クエリ並行実行数等は、どのようになっていますか?
また搭載OSはWin2000ですが、マシンの性能は?
その辺は逆にSQL Server 6.5 く比べ敏感な面がありますので・・・
※ 先に確認しておくべきでした。
SQL Server 2000 のサービスパックも、OSのサービスパック
に対し依存している部分がありますので・・・
尚、マイクロソフトの
http://www.microsoft.com/japan/sql/techinfo/deployment/2000/howtoup.asp?SD=GN&LN=JA&gssnb=1
この内容は確認して行われたのでしょうか?
多分、確認されたとは思いますが・・・
以上。
こんにちは。
色々なアドバイス、有難うございました。
マイクロソフトのホームページで
もう一度、確認してみます。
ツイート | ![]() |