- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里的第一篇文章,请保持温柔。 =)
我在一家继承了我们的客户之一使用的定制系统维护的公司工作。以前的开发人员(不再与我们合作)对所有数据库对象进行了加密(加密)。
在我们拥有该系统之前,该系统就一直受到各种超时问题的困扰,并且我们希望深入了解这些问题。
该数据库在生产中的SQL Express 2005上。我们希望在其上运行探查器,但是由于各种对象都已加密,因此大多数存储过程调用等都显示为“-加密文本”。
不太有用。我已经用C#编写了一个小的控制台应用程序来解密所有数据库对象,据我所知,它可以完美地工作
它找到数据库中的所有加密对象,然后为每个加密对象解密,删除with加密子句,删除原始对象并使用新的“未加密”文本重新创建它。
在尝试解密定义中使用的功能然后重新创建之前,有一些计算列已删除。
我发现的是,一旦所有内容解密,我就无法进入系统,因为存储过程等花费的时间太长,无法在首次调用时运行。执行计划是第一次编译,因此有些延迟是可以理解的,但是我们说的是1分钟以上.. 30秒后命中了命令超时,因此计划从未得到编译。
如果使用原始脚本删除并重新创建数据库对象(保留WITH ENCRYPTION子句),也会遇到相同的问题。
因此,这里存在一些一致性。但是,绝对使我困惑的是,如果我从数据库的原始副本(该数据库是从生产数据库的备份创建的)中删除执行计划,则相同的存储过程会更快。首次通话10秒。据我所知,存储过程,函数等是相同的。
从我的测试中,我认为不是导致问题的特定过程或功能。似乎延迟是累积的,我放下并重新创建的对象越多,速度就越慢。
我在黑暗中采取了一些随机措施,重建了索引并更新了统计信息-这一点都没有效果。
我们可以编写一些东西来执行所有540个功能,触发器,存储等,以抢占用户的第一个实际调用,但是一旦SQL Server重新启动(并且我们的客户确实不时重新启动其服务器),执行计划将被删除,我们需要再次运行相同的工具。对我来说,这似乎不是一个可行的选择(也不增加CommandTimeout属性),我想知道为什么我会看到这种行为。
我一直在使用sys.dm_exec_query_plan和sys.dm_exec_sql_text查看执行计划,并在测试中使用了DBCC DROPCLEANBUFFERS和DBCC FREEPROCCACHE。
我完全迷住了,在我跳出办公室 window 之前,请帮助我。
提前致谢,
安迪
- 编辑 -
我不太清楚我是怎么错过它的,但是 Activity 监视器显示 session 被表值函数的重新编译阻止了。编译时间太长,阻塞的查询达到超时。
我不明白为什么在原始数据库版本(从客户站点的备份中还原)中,编译需要大约10秒钟,但是在同一数据库中删除并重新创建这些对象后,表值函数需要大约一分钟的时间编译。
我尝试截断日志,但没有任何效果。我仍然需要查看文件大小。
-另一个编辑-
TVF返回一个临时表,并在查询中具有12个外部联接,全部在sys.server_principals或sys.database_role_members上。
我似乎还记得阅读过有关重新编译和临时表的内容,我将不得不再次检查。
最佳答案
您说自己(已计算)列已删除。表格中是否可能还有其他内容被操纵?如果是这样,您可能希望使用以下命令来重新索引表(这也会更新表的统计信息):
Exec sp_msForEachTable @COMMAND1= 'DBCC DBREINDEX ( "?")'
关于sql - 请问有人能解释为什么在SQL Server 2005中删除和重新创建存储过程会导致最初的速度下降比预期的要多得多吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469519/
如果我声明了类似的类型 type test(NSIZE) integer, len :: NSIZE real :: dummy(NSIZE) contains procedure,
我知道这是一个不太可能的事情,但是由于“选项私有(private)模块”的限制,甚至更糟糕的“私有(private)子/函数”的限制,有谁知道是否有一种方法可以从 Excel 应用程序隐藏 VBA 过
我有两个表,property 和 component。 component.id_property = property.id。 我正在尝试创建一个过程,该过程对所选属性的组件进行计数,如果所选属性没
我有一份报告,它是在 SSRS 2005 中开发的,我正在使用存储过程从数据库中获取结果。报告输出的结果非常简单,如下图所示。 如果假设我正在寻找不同的成员 例如:- MemberID c108 c
我需要一个通用函数/过程,该函数/过程将根据提供的数据计算出我的淡入淡出时间和值,如下所示: 我将字节值保存在字节数组中:这些是起始值。然后,我在其他数组中存储了一些值:这些将是新值。然后我有时间要提
我想在界面的多个按钮上创建相同的操作。是否只能通过创建单独的操作监听器方法并调用执行操作的方法才可行,还是还有其他方法?是否可以将按钮放在一个组中并执行以下操作:- groupButton.setOn
我有以下情况: procedure Test; begin repeat TryAgain := FALSE; try // Code // Code if this an
我正在尝试执行以下操作;假设我在 Oracle 中创建了一个对象类型 create type test as object( name varchar2(12), member procedure p
问题: 如果可能的话,如何声明一个用于任何类型参数的函数 T其中 T 的唯一约束是它被定义为 1D array如 type T is array ( integer range <> ) of a_r
我正在尝试创建这个 mysql 过程来制作一个包含今年所有日期和所有时间的表(以一小时为间隔。) CREATE TABLE FECHAS ( created_at datetime ); CREA
所以, 我在这里面临一个问题,这让我发疯,我认为这是一个愚蠢的错误,所以我不是 MySQL 的新手,但它并不像我想象的那样工作。 尝试将此语句部署到 MySQL 后,我收到此错误: ERROR 106
我有一个架构,其中包含星球大战中的人物列表、他们出现的电影、他们访问的行星等。这是架构: CREATE DATABASE IF NOT EXISTS `starwarsFINAL` /*!40100
我一直在为一家慈善机构创建一款应用程序,允许家庭在节日期间注册接收礼物。数据库组织有多个表。下面列出了这些表(及其架构/创建语句): CREATE TABLE IF NOT EXISTS ValidD
正如上面标题所解释的,我正在尝试编写一个sql函数来按日期删除表而不删除系统表。我在此消息下方放置了一张图片,以便直观地解释我的问题。任何帮助将不胜感激!感谢您的时间! 最佳答案 您可以通过查询INF
DELIMITER $$ CREATE PROCEDURE INSERT_NONE_HISTORY_CHECKBOX() BEGIN DECLARE note_id bigint(20); F
是否可以编写一个存储过程或触发器,在特定时间在数据库内部自动执行,而无需来自应用程序的任何调用?如果是,那么任何人都可以给我一个例子或链接到一些我可以阅读如何做到这一点的资源。 最佳答案 查看 pgA
我需要创建一个过程:1)从表中的字段中选择一些文本并将其存储在变量中2) 更新相同的记录字段,仅添加 yyyymmdd 格式的日期以及过程中的附加文本输入...类似这样的... delimiter /
好的,这就是我想做的: 如果条目已存在(例如基于字段name),则只需返回其id 如果没有,请添加 这是我迄今为止所管理的(对于“如果不存在,则创建它”部分): INSERT INTO `object
以下是我编写的程序,用于找出每位客户每天购买的前 10 件商品。 这是我尝试过的第一个 PL/SQL 操作。它没有达到我预期的效果。 我使用的逻辑是接受开始日期、结束日期以及我对每个客户感兴趣的前“x
我正在尝试在MySQL中创建一个过程那insert week s(当年)发送至我的 week table 。但存在一个问题,因为在为下一行添加第一行后,我收到错误: number column can
我是一名优秀的程序员,十分优秀!