gpt4 book ai didi

sql-server - LINQ-to-Entities 去掉 sp_executesql

转载 作者:行者123 更新时间:2023-12-01 07:16:27 25 4
gpt4 key购买 nike

我现在正在尝试使用 Database Engine Tuning Advisor 优化我的数据库,我面临的问题是我的 SQL Profiler 跟踪显示使用 sp_executesql 执行的大量查询- 顾问无法处理这些。这些查询似乎来自我正在使用的 LINQ-to-Entities,所以很好奇是否有任何方法可以让 LINQ-to-Entities 直接调用语句。

最佳答案

LINQ/.NET 通过将 SQL 查询发送为 sp_executesql 来运行 SQL 查询调用 SQL 服务器。然而,数据库引擎优化顾问 无法解析,通过 SQL Server Profiler , 捕获语句,因此调优 session 的结果会很差。

这就是我“拆箱”的方式 sp_executesql语句,然后再将它们提供给数据库引擎优化顾问,以便它可以正确地分析它们。

  • 中运行(或打开现有)调整 session 后SQL Server Profiler , 使用 File>Export>Extract SQL Server Events>Extract Transact-SQL Events... 保存包含所有 SQL 语句的 .SQL 文件。
  • 打开 .SQL 文件(例如 Notepad++ 6 - http://notepad-plus-plus.org/ )并运行以下查找和替换正则表达式以取消所有 sp_executesql语句到纯 TSQL。查找:^EXEC[\s]+SP_EXECUTESQL[\s]+[N]*'((''|[^'])*)'[\s]*,[\s]*[N]*'((''|[^'])*)'[\s]*,[\s]*([^\n]+)$替换:BEGIN\nDECLARE \3\nSELECT \5\n\1\nEND
  • 接下来,使用我们刚刚在 中构建的'unboxed' .SQL 文件。数据库引擎优化顾问 找出需要添加的索引。

  • 快乐调音!请注意,我选择了 Notepad++ 6(或更高版本),因为它有一个非常好的正则表达式实现,其他文本编辑器可能无法运行上面的表达式。

    关于sql-server - LINQ-to-Entities 去掉 sp_executesql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126437/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com