小编Dav*_*d W的帖子

如何减慢SQL查询?

听起来很奇怪,我需要放慢SQL查询的速度.目前,我在带有AdventureWorks数据库的内部开发服务器上使用Microsoft SQL Server 2008 R2.我正在测试一些代码,无论我尝试什么,我运行的查询都太快了!

基本上我正在测试一个截止功能,需要一个足够长的查询才能在它完成之前切断它.

不幸的是,由于它是本地安装,因此AdventureWorks数据库中没有单个查询或足够大的表来实际为我提供良好的数据.我试过了

WAITFOR DELAY '01:00'
Run Code Online (Sandbox Code Playgroud)

这对于测试以确保它正常工作非常有效,但现在我需要进行测试以确定是否可以在读取中间切断数据流.WAITFOR声明在这方面不公正,因为我需要它来主动从服务器检索数据.我的第一个直觉是使用复杂的计算来减慢速度,但是即使让SQL服务器将查询中的所有数值乘以37次,也只会使查询减慢毫秒.我尝试的第二件事是将WAITFOR语句嵌入到子查询中,但看起来你不能这样做.最后,我唯一没有尝试的是WAITFOR在它们之间执行多个存储过程,但我认为这不会对我需要的东西起作用.

我不得不说,当你接近服务器的时候,我对打一个绝对可怕的查询有多么难以接受.

有什么方法可以轻松减慢查询速度吗?

谢谢!

sql t-sql sql-server performance sql-server-2008

21
推荐指数
2
解决办法
7641
查看次数

如何对可以取消的DataTable操作执行SQL查询

我试图让标题尽可能具体.基本上我在后台工作线程中运行的是现在的一些代码,如下所示:

 SqlConnection conn = new SqlConnection(connstring);
                    SqlCommand cmd = new SqlCommand(query, conn);
                    conn.Open();
                    SqlDataAdapter sda = new SqlDataAdapter(cmd);
                    sda.Fill(Results);
                    conn.Close();
                    sda.Dispose();
Run Code Online (Sandbox Code Playgroud)

其中query是表示大量耗时查询的字符串,conn是连接对象.

我现在的问题是我需要一个停止按钮.我已经意识到杀死背景工作者将毫无价值,因为我仍然希望在取消查询后保留结果.此外,在查询之后,它将无法检查已取消的状态.

到目前为止我想出的是:

我一直试图概念化如何有效地处理这个问题,而不会影响太大的性能.

我的想法是使用SqlDataReader一次从查询片段中读取数据,以便我有一个"循环"来检查我可以通过按钮从GUI设置的标志.问题是据我所知,我不能使用数据表的Load()方法,仍然能够取消sqlcommand.如果我错了请告诉我,因为这会使取消稍微容易一些.

根据我发现的内容,我实现了,如果我执行类似下面的操作(伪代码),我可能只能取消sqlcommand mid-query:

while(reader.Read())
{
 //check flag status
 //if it is set to 'kill' fire off the kill thread

 //otherwise populate the datatable with what was read
}
Run Code Online (Sandbox Code Playgroud)

然而,在我看来,这将是非常无效的,并且可能代价高昂.这是杀死正在进行的绝对需要在数据表中的sqlcommand的唯一方法吗?任何帮助,将不胜感激!

c# sql sql-server sqlcommand sqldatareader

10
推荐指数
1
解决办法
1446
查看次数

使用SqlConnectionStringBuilder指定端口?

我遇到了麻烦.我需要为本地安装的SQL Server 2008 R2指定端口号.到目前为止,我已经尝试使用SqlConnectionStringBuilder并将数据源设置为.\TESTSERVER, 1433,所有文档都应该将我连接到端口1433上的服务器TESTSERVER(默认值).

连接字符串如下所示:

{Data Source=".\TESTSERVER, 1433";Initial Catalog=AdventureWorks;User ID=testuser;Password=MYPASSWORDHERE}

但是我收到的错误如下:

建立连接SQL Server时发生网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确以及SQL Server是否配置为允许远程连接.(提供者:TCP提供者,错误:0 - 无法建立连接,因为目标计算机主动拒绝它.

在使用SqlConnectionStringBuilder.ToString()它验证连接字符串时,几乎可以看出MSDN的建议.由于某种原因,它仅包含数据源周围的双引号而不包含任何其他内容.但是,这可能只是调试器删除外部引号,因为它存储在string数据类型中.我还验证了SQL服务器是可以访问的,而无需指定端口,它是.最后,我验证了服务器可以接受远程连接.考虑到这个SQL Server实例是在本地安装的,使用默认端口,在我的开发计算机上,我无法想象为什么我会收到这样的错误.

这是因为SqlConnectionStringBuilder是用它自己的端口覆盖我的端口吗?我是否需要出于某种原因在我的防火墙上打开端口?知道它是完全本地安装,它不应该遇到防火墙问题.我宁愿不必手动构建连接字符串.并不是说它很难,它只是给我的代码增加了一层复杂性,除非需要,否则我不愿意.

任何帮助,将不胜感激.谢谢!

编辑:

经过SqlConnectionStringBuilder语法的长时间艰难挖掘后,它似乎通过传递给引号中包含的连接字符串来处理无效参数.我想这是因为它破坏了连接串.我的问题仍然存在:有没有办法通过SqlConnectionStringBuilder传递端口,还是我必须自己构建它?

c# sql-server connection-string database-connection sql-server-2008-r2

9
推荐指数
2
解决办法
1万
查看次数