Jer*_*oyd 4 performance sql-server-2008 profiler
在调整我们的数据库和查询我们的一种产品时,我决定在 QA 环境中打开 Profiler 并查看它显示的内容。
我看到对于我调用的每个插入,都会使用插入语句的文本对 sp_executesql 进行调用。
这似乎很受欢迎,有没有办法关闭它?
环境:
我不会太担心。
这个想法是参数化语句以供重用。也就是说,避免编译
假设您有 3 个不同的客户端运行 3 个单独的语句:
SELECT col1, col2 FROM SomeTable WHERE col3 = 1
SELECT col1, col2 FROM SomeTable WHERE col3 = 15
SELECT col1, col2 FROM SomeTable WHERE col3 = 42
Run Code Online (Sandbox Code Playgroud)
每一个都有不同的文本,因此将被编译成不同的计划。也就是说,3 个编译和 3 个计划在缓存中。
现在,这 3
EXEC sp_executesql 'SELECT col1, col2 FROM SomeTable WHERE col3 = @p0', '@p0 int', '1'
EXEC sp_executesql 'SELECT col1, col2 FROM SomeTable WHERE col3 = @p0', '@p0 int', '15'
EXEC sp_executesql 'SELECT col1, col2 FROM SomeTable WHERE col3 = @p0', '@p0 int', '42'
Run Code Online (Sandbox Code Playgroud)
这里的可重用计划是针对语句的,SELECT col1, col2 FROM SomeTable WHERE col3 = @p0
因此您有一个计划是缓存。
在繁忙的系统中,这个编译时间很重要。并且大多数查询当然比这更复杂:您通常可以在第一次运行与后续运行时看到这一点(请参阅测试查询速度)
同样在复杂和繁忙的系统中,计划缓存大小可能会受到限制,或者从数据缓存(缓冲池)中取出 RAM,这也会阻碍事情的发展。极端可能是 10000 个计划或一个繁忙的网络应用程序。(效果取决于 32 位与 64 位的细微差别)
某些 ORM 和驱动程序允许您将其关闭,通常是“准备好的语句”或某些选项:但请注意,它可能会减慢速度。您说“这似乎很受欢迎”,这意味着您担心负载...