none
sp_special_columns_100 について RRS feed

  • 質問

  • プログラムから、SQLServer2012にSQL Server Native Clientを使用して接続しています。
    プログラム上でデータベースにログオン後のテーブル参照の際の話なのですが、
    どのテーブルにおいても、そのテーブルに最初にアクセスした際に、
    直前にsp_special_columns_100 というストアドプロシージャが走っているようです。
    また、sp_special_columns_100 の処理はすぐに終わるものもあれば数秒時間が
    かかるものもあります。

    同一のテーブルで初回参照時に取得するレコード数を変更してみたり
    したのですが、処理の時間はテーブルにごとに同じでした。

    処理に時間がかかるのであれば、sp_special_columns_100を
    呼ばない様にしたいのですが、
    ネット上に情報が無く、難儀しています。

    以下はsp_special_columnsのドキュメントのページですが、
    時間がかかる理由や停止する方法などはかかれていないように思います。
    https://msdn.microsoft.com/ja-jp/library/ms173810(v=sql.120).aspx

    何かご存じな方がおられればご教示お願いします。

    2015年10月14日 11:26

回答

  • 公式ですと、以下のあたりに一応の情報があります。
    https://technet.microsoft.com/ja-jp/library/mt204025.aspx

    ODBC 接続の際に内部的に使用するものですので、ユーザーが使用するかどうかを選ぶものでは無いようです。

    内部的には sys スキーマの各種テーブルにアクセスしているだけだと推測されますので、この処理に時間がかかっているとすると、何らかのリソース不足か、何らかのロック/ラッチ待ちだと思われますので、通常のパフォーマンスチューニングと同様に何待ちになっているか確認するというのは手としてありだと思います。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク 星 睦美 2015年10月22日 2:50
    2015年10月15日 3:28

すべての返信

  • 公式ですと、以下のあたりに一応の情報があります。
    https://technet.microsoft.com/ja-jp/library/mt204025.aspx

    ODBC 接続の際に内部的に使用するものですので、ユーザーが使用するかどうかを選ぶものでは無いようです。

    内部的には sys スキーマの各種テーブルにアクセスしているだけだと推測されますので、この処理に時間がかかっているとすると、何らかのリソース不足か、何らかのロック/ラッチ待ちだと思われますので、通常のパフォーマンスチューニングと同様に何待ちになっているか確認するというのは手としてありだと思います。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク 星 睦美 2015年10月22日 2:50
    2015年10月15日 3:28
  • ありがとうございます。
    どうもODBC API SQLSpecialColumns Function を呼んでいる箇所で発生するようです。
    詳細はわかりませんが、ロジックで記述していない以上、
    DelphiのFireDACのDB関連の部品から呼んでいそうです・・・
    https://msdn.microsoft.com/en-us/library/ms714602(v=vs.85).aspx

    どちらにしろ簡単には解決できなそうです。
    時間がかかるテーブルの傾向ですが、
    列数が多く、さらに行数が多いと時間がかかる模様です。

    いまからDBを変更するのも大変なので、
    時間のかかるテーブルを前もって呼んで置くなどして、
    対処しようかと思います。

    2015年10月16日 6:40