使用ODBC的SQL Server存储过程调用很慢。 (SQLExecDirect的)

时间:2017-10-03 16:17:34

标签: sql-server performance odbc

我有一个C程序使用SQLExecDirect调用SQL Server存储过程。

存储过程本身不执行任何SQL,只是映射参数和调用sp_getapplock。但是,当运行多次时,这种情况的表现很慢。

我有1000个这样的循环,并且使用时间,看到每20个中的1个花费大约15/16毫秒,而其他呼叫几乎没有任何时间注册。我尝试过SQLPrepareSQLExecute,将驱动程序更改为Native等,没有任何区别。我甚至转到SQL Server 2016尝试将存储过程编译为本机,但不能调用sp_getapplock来编译。

我已经在存储过程中注释了sp_getapplock调用本身而没有改变性能(在这种情况下它只是做了几个SET)所以我认为问题必须在ODBC调用端。

  • SQL Server 2016
  • ODBC驱动程序V13

参考:Microsoft doc

伪代码:

static sql_handle = null;

if (sql_handle == null)
{
    SQLAllocStmt(..)

}

SQLBindParameter(..)
SQLBindParameter(..)

SQLExecDirect(handle, "{? = call MYSTOREDPROC(?,?)}");

SQLCancel();

0 个答案:

没有答案