我有一个包含数百万行的表,我需要不时从中运行一些查询。第一个查询通常会很慢(大约 10 秒),随后的查询通常会更快(大约 1 秒)。几个小时后,一个缓慢/然后快速的循环再次开始。
我已经在我的执行计划中检查了所有需要的索引都存在并得到了适当的使用,我认为性能差异是由于索引实际上在内存中用于后续查询(我是对的,还是有其他可能的原因?)
我还使用索引运行了许多其他查询,但这些查询耗时较少,性能也不那么重要,所以我担心这些索引实际上是将我的关键索引从内存缓存中推出。
除了明显的“添加更多 RAM”修复之外,我一直在考虑编写虚拟查询脚本,使其每小时运行一次,以强制索引返回内存。
有没有更优雅的方法来做到这一点?就像暗示 SQLServer 的一种方式,如果它只有足够的内存来保持一个索引缓存,它应该是那个?
我知道通常最好的办法是不要在这类事情上搞砸 SQLServer,但是我的查询的不寻常性质(很少运行,但对时间要求严格)让我相信它是有意义的(如果可能的话) .
我也很想知道是否有办法知道在给定时间哪些索引缓存在内存中?
最近,我们的索引出现了许多问题,我们的 DBA 团队将这些问题归因于最近没有运行的统计数据。这让我想知道 - 我如何检查最近是否通过 SQL Management Studio 更新了统计信息?
如果这个问题没有很好地解释这一点,我深表歉意 - 直到现在我才开始接触统计数据,在此之前,每当我遇到与性能相关的问题时都会查看索引。
编辑:
我正在使用以下内容但收到语法错误:
use *databasename*
exec sp_autostats *schema.tablename*
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '.'.
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我想对 SQL Server 2008 数据库中具有不同用途的对象使用单独的架构。现在我们使用一种相当令人麻木的命名约定来指示表或存储过程的用途,前缀意味着我们必须扫描五六个字符才能看到唯一名称的开头。我想对仅用于驱动 UI(菜单、人员角色等)的表以及维度表与事实表等使用单独的模式。
我的问题是,使用多个模式(模式?)与旧的 dbo 对立,是否会对性能产生影响?
我修改了数据库中的一个中央表,sp_depends 确实返回了数百个结果,我担心其中一些存储过程在我更改后可能不再编译。
检查单个存储过程很容易(我只是重新运行alter 脚本并查看操作是否成功),但是对100 多个过程执行此操作有点麻烦。
我知道我可以使用脚本像这样一个重新编译我的数据库中的所有对象,但实际操作中会发生下一次的存储过程执行,而不是立即,这样似乎并不在我的情况适合。
我还想我可以完全删除所有的存储过程,并用我的源代码控制系统重新同步我的数据库,但是这个选项虽然可行,但不是很优雅。有没有更好的方法来做到这一点?
我使用的是 SQLServer 2008 R2,我的数据库脚本存储在 VS 2008 数据库项目中。
澄清一下,我并不是主张人们应该仅仅依靠这种方法来测试代码。就像在 c# 中一样,您在编写代码时会立即检测其他依赖文件中的语法错误(然后使用其他策略进行测试,例如单元测试,这通常会慢几个数量级),我认为检测 SQL 依赖关系是有意义的在几秒钟内出错,而不必运行通常需要几个小时才能完成的完整功能测试。
我testtable在数据库testbase中创建了一个具有以下结构的表:
product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
Run Code Online (Sandbox Code Playgroud)
但是,如何编写触发器,以便它更新已修改(或使用新信息更新)的特定行,并将修改日期记录到expire_date字段中,并将修改时间记录到expire_time字段中?(或者如果这是可能的?)
最近我一直在使用 EXECUTE AS LOGIN 来检查某个人是否可以或不能在我们的一个数据库中使用表函数。测试表明他可以,但他一再报告失败。
该人使用登录“WEB”连接到数据库,并且他在该数据库中拥有与登录“WEB”关联的用户“WEB”,因此我尝试了以下脚本:
-- part 1
EXECUTE AS USER = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
Run Code Online (Sandbox Code Playgroud)
和
-- part 2
EXECUTE AS LOGIN = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
Run Code Online (Sandbox Code Playgroud)
第一部分很好,结果如下:
网站 | 网站 | 网站 | 网络
但是第二个结果有点令人困惑:
dbo | 网站 | 网站 | 网络
EXECUTE AS USER 和 EXECUTE AS LOGIN …
我已经开始我SQL Server 2008 sqlcst02\inst01在Single User Mode通过附加;-m到该实例在启动参数结束SQL Server Configuration Manager。我已经停止SQL Server Agent了inst01实例。我的帐户是 的成员,Domain Admin group我尝试使用登录sqlcmd -S sqlcst02\inst01并不断收到错误,提示该服务已进入Single User Mode且只有一个管理员可以登录。我尝试添加;-m"sqlcmd"到启动参数以将连接限制为仅,sqlcmd但我得到了相同的结果。我已经尝试以我自己的帐户登录并以本地管理员帐户登录。我已经以我自己和管理员的身份启动了命令提示符,但我得到了相同的结果。我试过使用ADMIN:sqlcst02\inst01in连接SSMS。没运气。
我正在尝试重置sa密码,因为以前的管理员没有为我留下这些信息。这令人抓狂。我以前在其他机器上这样做过,没有任何问题。
我现在正在成为一名在工作中有点不自觉的 DBA,真的需要一些帮助。
我们在完全恢复模式下有一个 40GB 的数据库,没有配置日志备份和一个 84GB 的巨大日志文件。到目前为止,我挽救这种情况的计划是在数据库上运行完整日志备份,缩小日志文件并制定维护计划,每晚使用数据库备份运行日志备份,以帮助控制它。
我的问题是我不希望日志文件缩小到零并在星期一的第一个早上不断增长。我对文件应该是什么(大约数据库的 20%)有一个粗略的估计,并希望从一开始就设置它以确保尽可能多的连续空间。这只是在数据库属性-> 文件下更改“初始大小”的情况吗?我也猜想数据库需要离线才能发生这种情况?
提前致谢
SQL Server 版本:2008 R2 Enterprise SP2
我正在尝试处理我们的 SQL Server 维护,但我遇到了一些我认为不正确的事情。我们有一个带有 3 个数据库的单个生产实例,每个数据库都异地镜像到一个 DR 实例。
在查看 DR 实例时,我注意到 LDF 文件很大,对于频繁使用的数据库超过 35GB。
我知道这可能是由于镜像数据库处于完全恢复模式并且日志从未备份过,它们只会继续增长,直到驱动器空间耗尽。
我们在主体数据库上做日志备份,我的问题是在镜像上做日志备份有什么问题?
在进行日志备份之前,必须至少完成一次来自镜像的完整数据库备份,在这种情况下,是否需要使用特殊选项,因为它是镜像?
这也是MIRROR数据库上的事务日志维护建议。
感谢您提供任何意见
当我在命令行上指定 /ConfigFile something.dtsConfig 时,2008 年包配置与 2005 年相比发生了变化,包中定义的变量将保留其设计时值,而不是使用配置文件中的设置。
我不太确定我完全理解如何获取要使用的外部配置文件。我读过一些文章,说只有设置的设计时配置才会覆盖外部文件的负载。这是否意味着我可以将变量更改为空字符串,然后它们会被覆盖?我不能完全删除变量!整数呢?
我看过一些文章提到使用包中的包配置关闭。
我可以使用 SSIS 包编辑器或 XML 编辑器来更改包中的配置文件路径,然后它将“最后”使用该文件的设置(无论外部 /ConfigFile 选项如何),但我不想成为改变包。我想要一个带有 Test.dtsConfig 和 Production.dtsConfig 的包,并且能够在不更改包的情况下来回交换。
现在推荐的方法是什么?
sql-server-2008 ×10
sql-server ×6
buffer-pool ×1
index ×1
mirroring ×1
performance ×1
scripting ×1
security ×1
ssis ×1
t-sql ×1
trigger ×1