我正在接手一个新项目,它有大约 2500 个 SP!并想知道在当前状态下每个存储过程所花费的最大/最小时间是多少。还有 IO,每个 SP 使用的逻辑读取。想以这种方式对其进行基准测试。每次新下降后都会使用此基准来比较所做的更改是否有帮助。
DMV 或扩展活动在这里有帮助吗?或者我是否需要运行覆盖我完整工作负载的跟踪来捕获它?
我在 SQL Server 2008 上创建了一个新表。
该表有一个标识列,定义如下:
[ID] [int] IDENTITY(1,1) NOT NULL
Run Code Online (Sandbox Code Playgroud)
但是,当我插入任何数据时,第一条记录从 0 开始,而不是从 1 开始。
我希望记录从 1 开始。为什么这不起作用?
如果我删除该记录并将其重新设定为 0,则它可以工作。
Delete from [tablename]
DBCC CHECKIDENT('[tablename]', RESEED, 0)
Run Code Online (Sandbox Code Playgroud)
但是它不适用于新创建的表。
即使我删除并重新设置新创建的表,它仍然从 0 开始添加记录,而不是从 1 开始。
任何人都可以请建议我做错了什么。
谢谢
我有一个 SQL 脚本,在其中生成数据库及其表、存储过程、视图等。我使用以下脚本生成数据库和所有内容。我能够生成表,但在存储过程中它给出了一个错误:
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.'
Run Code Online (Sandbox Code Playgroud)
这是代码。我使用了一个if/else块,所以不能使用一个go语句。我检查数据库是否存在并采取适当的措施。任何人都有解决方案?
编辑后:
IF EXISTS(SELECT name FROM sys.databases WHERE name = 'SampleDB')
begin
PRINT 'Exist.'
end
Else
begin
CREATE DATABASE SampleDB
exec sp_dboption N'SampleDB', N'autoshrink', N'false'
exec sp_dboption N'SampleDB', N'ANSI null default', N'false'
exec sp_dboption N'SampleDB', N'recursive triggers', N'false'
exec sp_dboption N'SampleDB', N'ANSI nulls', N'false'
exec sp_dboption N'SampleDB', N'concat null yields null', N'false'
exec sp_dboption N'SampleDB', N'cursor close on commit', N'false'
exec sp_dboption …Run Code Online (Sandbox Code Playgroud) 压缩和收缩 SQL Server 中的数据库是否相同?如果我压缩一个表,它会降低查询性能和 DML 吗?
如果我这样做——
SELECT dv.Name
,MAX(hb.[DateEntered]) as DE
FROM
[Devices] as dv
INNER JOIN
[Heartbeats] as hb ON hb.DeviceID = dv.ID
WHERE DE < '2013-03-04'
GROUP BY dv.Name
Run Code Online (Sandbox Code Playgroud)
我收到这个错误——
消息 207,级别 16,状态 1,第 17 行 列名“DE”无效。
如果我这样做——
SELECT Name, DE FROM (
SELECT dv.Name
,MAX(hb.[DateEntered]) as DE
FROM
[Devices] as dv
INNER JOIN
[Heartbeats] as hb ON hb.DeviceID = dv.ID
GROUP BY dv.Name
) as tmp WHERE tmp.DE < '2013-03-04'
Run Code Online (Sandbox Code Playgroud)
它按预期工作。
有人可以解释为什么我需要将主查询嵌套为子查询来限制我的数据集吗?
另外,这里是否有更好的方法来实现目标?从一张表中检索所有记录,以及按[DateEntered]降序排列的单个“顶部”相关记录?
作为这个问题的后续,我想知道是否有更好和/或更有效的方法来收集相关数据。
如前所述,这个查询确实返回了我需要的 95% 的数据——
SELECT dv.Name
,MAX(hb.[DateEntered]) as DE
FROM
[Devices] as dv
INNER JOIN
[Heartbeats] as hb ON hb.DeviceID = dv.ID
GROUP BY dv.Name
HAVING MAX(hb.[DateEntered]) < '20130304';
Run Code Online (Sandbox Code Playgroud)
有没有办法实现相同的结果(对于每个设备,选择由 DateEntered 排序的 TOP Heartbeat 的 DESC)而且还从表中选择整行[Heartbeats]?现在,我只得到那DateTime一行的。
如果我在GROUP BY子句中包含其他列,则可以将它们添加到选择中;但后来我每[Devices]行得到多行,这是我不想要的。这听起来很奇怪,但我基本上想要做的是对它进行查询[Devices],然后for...each对该集合进行查询并[Heartbeats]为该[Devices]行添加第一行。那可能吗?
更新 这是心跳表的结构:
CREATE TABLE [dbo].[Heartbeats](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DeviceID] [int] NOT NULL,
[IsFMSFMPUp] [bit] NOT NULL,
[IsFMSWebUp] [bit] NOT NULL,
[IsPingUp] …Run Code Online (Sandbox Code Playgroud) 我们正在将 SQL Server 2005 数据库迁移到新服务器并升级到 2008,我正在寻找一些建议和保证我们的方法是正确的。
我继承了这个数据库,但说实话,我发现它有点混乱 - 最重要的是,我基本上已经学会了在这台服务器上成为一名 SQL Server 开发人员(没有计算方面的教育背景),所以我做了很多我自己的错误。我们作为一个部门(公共部门)资金不足,因此缺乏专业知识,只能靠自己的力量自力更生。数据库一开始只是一个后台的东西,但对我们的组织来说已经变得非常重要,因此坦率地说,性能令人尴尬。
所以我们有这样的问题
text到处都是不合适的数据类型(很多Nvarchar, nchar,ntext当我们不需要 ascii 字符时,text哪里varchar更合适)新服务器是 64 位虚拟服务器,存储在 RAID 上。
我安装和升级后的计划是:
text数据类型规范化为varchar/char在这些流程之后/之前,我还有什么应该考虑的吗?这里的任何决定是否看起来不合时宜?例如文件大小问题 - 这是我在 RAID 上需要担心的事情吗?
我有一个example.mdf总大小为 1GB的数据库,它存在性能问题。我检查了分配的硬件,它高于要求,我仔细检查了设计,一切看起来都正常,当我查看.mdf物理位置 ( C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\example.mdf)中的文件时,我发现数据库被拆分为多个文件example_1.mdf, example_2.mdf, example_3.mdf, 直到example_7.mdf.
我在同一 SQL Server 上有另一个具有相同问题的数据库文件。
为什么会发生这种情况?这会影响性能吗?如何防止或阻止 SQL Server 拆分我的.mdf文件?此外,我需要合并回已经拆分的文件。
使用 SQL Server 2008 R2,供应商数据库中的主事务表与所有其他表相比非常庞大,大约有 14 个索引。其中一些索引不会在我们的环境中使用,但我们无法删除它们。这不是问题,这只是我们必须忍受的事情。
我的问题是为什么这些低读取或无读取索引中的一些似乎正在使用内存 - 比同一个大表上经常使用的其他索引更多。我原以为大部分缓冲区缓存都会用于频繁读取的对象。这些索引上发生的唯一事情是写开销。
例如,这些低读取索引中的一个分配了大约 2 GB 的内存(索引总大小的 58%),另一个分配了 1.7 GB 的内存(其大小的 27%)。同时,规模庞大且使用良好的聚集索引本身只有 4 个演出(其大小的 2%)。具有大量读取的不同 NC 索引在缓冲区缓存中只有 100 MB(其大小的 5%)。
查看物理统计数据,我可以看到碎片非常糟糕。从该表上的所有写入和非顺序插入可以理解这一点。不过,我不确定它是否与内存使用有关。
查看这些索引的操作统计数据也很有趣。
我意识到这是一个抽象的问题,我没有提供很多实际的统计数据。我只是好奇 SQL Server 如何做出这些缓冲区缓存使用决策,并想知道是否有人理解它。
我有一个任务:我创建了一个lamb包含几个表的文件组的数据库。
我需要将 csv 提取到命名的文件组中的表中lamb并备份该文件组。
然后再次提取另一个 csv 文件并再次备份。
但我需要能够恢复第一个备份。
什么是备份和恢复方法?是否可以仅恢复lamb文件组?
sql-server-2008 ×10
sql-server ×7
performance ×2
t-sql ×2
backup ×1
buffer-pool ×1
cache ×1
compression ×1
datafile ×1
memory ×1
migration ×1
restore ×1
select ×1
shrink ×1
subquery ×1