小编mar*_*c_s的帖子

SQL Server 2008 和扩展属性

在 SQL Server 中,你们使用扩展属性做什么?一些文章和博客建议将它们用于数据库及其对象的自我记录,但我看不到它被正确使用......大多数人都忽略了这一点吗?

sql-server-2008 sql-server

8
推荐指数
1
解决办法
1102
查看次数

SQL Server 未使用可用内存

Windows 2008R2 Enterprise 上的 SQL Server 2008 R2 标准版(64 位)

  • 服务器有超过 300 GB 的内存,但控制面板中的总内存使用量从未超过 86 GB
  • 将 SQL 配置为使用最大内存量
  • 即使在大量使用情况下 - CPU 超过 80% 数分钟

  • 专用 SQL Server

  • 几个大型数据库
  • 一个频繁使用的表的索引大小超过 10 GB

将服务帐户设置为在内存中锁定

这是正常的吗?

我可以测试什么?

我可以让 SQL Server 使用更多内存吗?

sql-server memory sql-server-2008-r2 hardware

8
推荐指数
1
解决办法
1017
查看次数

删除数百万条记录后,为什么我的 SQL Server 数据库的大小增加了三倍?

我们有两个数据库表ErrorLogAudit并且在过去几年中都变得相当大。所以为了减少数据库的大小,我必须编写一个脚本来清除这两个表中所有超过 6 个月的行。

这就是我想出的:

ALTER DATABASE StudioWebTest SET RECOVERY SIMPLE;

DELETE FROM [Audit] WHERE AuditDate < DATEADD(M, -6, GETDATE());
DELETE FROM [ErrorLog] WHERE ErrorDate < DATEADD(M, -6, GETDATE());

ALTER DATABASE StudioWebTest SET RECOVERY FULL;
Run Code Online (Sandbox Code Playgroud)

在我的开发机器 (SQL Server 2008 R2) 上,无论是否更改恢复模式,数据库大小都会增长 2-3 倍。但是,如果我立即使用收缩命令进行跟踪,它会将数据库的大小减少到原始大小的一半(在删除记录之前)。

但是,如果我推迟几天进行收缩,收缩几乎没有那么有效,因为虽然数据库大小减少了,但它仍然几乎是原来大小的两倍(在删除记录之前)。不太了解 SQL Server 如何使用它分配的空间,我认为这与使用已释放的额外空间有关。

除了一件事,这一切都可以。当我们在使用 SQL Server 2005 的生产测试环境中运行它时,shrink 命令不会将数据库的大小减少到原始大小的一半。

作为替代方案,我也尝试使用TRUNCATE代替,DELETE但这似乎没有太大区别。语句完成后数据库仍然大量增长,我仍然必须缩小它以获得相同的结果。我们还没有在生产测试机器上尝试过这个,但是因为shrink 命令似乎没有削减它,所以这是否会产生任何改进似乎值得怀疑。

无论如何,我只是想知道是否有人可以解释为什么尽管更改了错误恢复设置,数据库还是增长了这么多?如何防止这种情况发生?或者,如果这不是解决此问题的最佳方法,则可能建议减少数据库大小的替代方法。

更新:

我只是使用TRUNCATE它进行了更多测试,现在似乎没有增加大小(也许是我想象的)。我仍然需要缩小数据库以查看整体大小的减少。我可能会在生产测试服务器上尝试这个。归根结底,只要规模缩小到一定程度,我的经理就会很高兴。

sql-server-2005 sql-server-2008

7
推荐指数
1
解决办法
2954
查看次数

批量数据加载和事务日志

我目前正在开发一个项目,该项目从平面文件 (csv) 中批量导入数据,大约 18 个不同的文件通过一些存储过程链接到特定的表。

我按照数据加载性能指南中的建议进行了操作。

数据库处于BulkLogged恢复模式以最小化日志记录,当在包含 600000 行的文件上执行以下存储过程时,我收到错误

消息 9002,级别 17,状态 4,过程 SP_Import__DeclarationClearanceHistory_FromCSV,第 34 行
数据库的事务日志已满。要找出无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列

(出于测试目的,我在开始导入之前进行了完整备份)。

看着log_reuse_wait_desc我看到以下内容:

log_reuse_wait_desc 检查点。所有其他导入成功导入。

欢迎任何解决此问题的意见。

PROCEDURE [dbo].[SP_Import_DeclarationClearanceHistory_FromCSV]
    @FilePath [nvarchar](1000)
AS
BEGIN
    -- Creating a Temproary Table for importing the data from csv file.
    DBCC TRACEON(610)

    CREATE TABLE #DeclarationClearanceHistory
    (
          [ItemID] [int] IDENTITY(1, 1) NOT NULL ,
          [CMSDeclarationID] [bigint] NOT NULL ,
          [StatusCode] [nvarchar](10) NOT NULL ,
          [SubStatus] [nvarchar](10) NULL ,
          [DepartmentCode] [nvarchar](10) …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization bulk sql-server-2008-r2 import

7
推荐指数
1
解决办法
4330
查看次数

创建聚集索引后出现LOCK错误

我刚刚在 1MM 行表上创建了一个聚集索引(打开了页和行锁定)。我现在尝试运行查询,但出现此错误:

“SQL Server 数据库引擎的实例此时无法获取LOCK资源。当活动用户较少时重新运行您的语句。请数据库管理员检查此实例的锁和内存配置,或检查长时间运行交易。”

我稍后需要调整页/行锁定设置,但同时我需要删除索引,因为我有用户查询表。我试图放弃它,但我收到了同样的错误。有什么建议可以永久删除索引吗?谢谢你。

编辑 1:基于下面的 Remus 回答,我运行了以下脚本以启用锁的动态内存分配。

EXEC sp_CONFIGURE 'show advanced options', 1 RECONFIGURE
EXEC sp_configure 'locks', 0 RECONFIGURE
Run Code Online (Sandbox Code Playgroud)

然后,我重新启动了服务器。

sql-server sql-server-2008-r2

7
推荐指数
1
解决办法
2354
查看次数

sql_slovak_cp1250_ci_as 与 Slovak_CI_AS

有人可以向我解释 collat​​ionsql_slovak_cp1250_ci_as与collat​​ion 之间的区别Slovak_CI_AS吗?

我有一个 db 设置为sql_slovak_cp1250_ci_as并且共享主机仅支持Slovak_CI_AS. 应该不会有问题吧?

非常感谢。

sql-server collation sql-server-2012

7
推荐指数
1
解决办法
4284
查看次数

如何更改 SQL Server 2012 可用性组 DNS 子域?

问题:如何让我的可用性组注册为ag-ewgtest.sql.company.com我的服务器认为自己的给定server.company.com

设置:我的 SQL Server 2012 可用性组位于多个子网上,类似于这篇 MSDN 博客文章 中的描述。当我进入故障转移群集管理器时,它显示名称解析尚不可用:

在此处输入图片说明

然后我右键单击“名称:ag-ewgtest”并选择属性。我勾选了“发布 PTR 记录”,它显示全名是ag-ewgtest.company.com.

在此处输入图片说明

我的问题是我只被允许更新 DNS 区域sql.company.com。如果我将 DNS 名称更改为 ,ag-ewgtest.sql.company.com则全名变为ag-ewgtest.sql.company.com.company.com.

我尝试将我的 NIC 更新为:

在此处输入图片说明

但并没有什么不同。如何更改我的可用性组尝试注册的子域?

sql-server sql-server-2012 dns availability-groups

7
推荐指数
1
解决办法
8212
查看次数

在主键上使用包含列的第二个索引有什么好处?

我正在查看我们的数据库并注意到在特定表上我们有以下索引:

Col1    INT IDENTITY(1,1) Primary Key
Col2    INT
...
about 15 more columns
....
ColN   VARCHAR(50)
....
another 10 more columns
Run Code Online (Sandbox Code Playgroud)

除了标准的主键聚集索引之外Col1,我们还有以下索引:

create nonclustered index [iTable-Col1] ON [dbo].[Table1]
(
    Col1
)
include ( ColN )
Run Code Online (Sandbox Code Playgroud)

我们定期搜索Col1并且只想检索ColN. 该索引确实得到使用,因为它是包含满足查询所需的所有数据的最小索引。

我的问题是,这个索引对 SQL Server 有什么好处吗?我们最好放弃它并只在聚集索引上进行搜索吗?

我唯一的想法是这个索引比聚集索引(25mb vs 300mb)小得多,这可能会使搜索和/或缓存更快。

如果有任何区别,服务器是 SQL Server 2012。

index sql-server index-tuning sql-server-2012

7
推荐指数
1
解决办法
2485
查看次数

目标不匹配时如何与更新源合并?

我正在尝试编写一个存储过程,该过程将从临时表中获取新值,将它们合并到一个实际表中,为我提供插入行的 ID,以及与其值匹配的已经存在的行。

现在,从我所看到的来看,MERGE 函数似乎不支持我想要做的事情,除非我做错了(完全有可能,我不是 SQL 专家——.NET)。不管怎样,我今天晚上才真正了解了MERGE,一开始我似乎应该使用它,但它似乎没有我需要的功能,因为我无法获得以前存在的ID,我需要其余的存储过程。我的主要重点是看看我是否可以让它工作,但另一个问题是我需要确保代码处理对将通过 MERGE 运行的存储过程的潜在并发调用。我知道我现在没有锁定在那里,但我只是想让它在这一点上工作。那么,我所拥有的......

设置

DECLARE @Metadata TABLE
(
    MetadataId INT PRIMARY KEY IDENTITY(1,1),
    MetadataTypeId INT,
    MetadataTypeValueId INT
)

INSERT INTO @Metadata 
VALUES
(1,23),(2,32),(2,33),(2,43),(1,24),(3,33),(1,20)

--Original Table Data
SELECT * FROM @Metadata

DECLARE @MergeMetadata TABLE
(
    MetadataId INT,
    MetadataTypeId INT,
    MetadataTypeValueId INT
)

INSERT INTO @MergeMetadata (MetadataTypeId, MetadataTypeValueId)
VALUES
(2,32),(2,35),(3,34),(4,1),(1,23)

--Metadata that needs added and/or ID'd if exists
SELECT * FROM @MergeMetadata

DECLARE @FinalMetadata TABLE
(
    MetadataId INT,
    MetadataTypeId INT,
    MetadataTypeValueId INT
)

INSERT INTO @FinalMetadata (MetadataId, …
Run Code Online (Sandbox Code Playgroud)

sql-server concurrency merge

7
推荐指数
1
解决办法
2万
查看次数

我可以使用属性名称来标识 XML 元素吗?

除了使用COLUMN[1]/@value下面的元素索引,是否可以通过指定属性名称来检索列值,例如:COLUMN[@name=”Prod_ID”]/@value

当我尝试时,我收到此错误:

消息 2389,级别 16,状态 1,第 41 行
XQuery [value()]:“value()”需要单例(或空序列),找到类型为“xdt:untypedAtomic *”的操作数

我的代码:

DECLARE @xml AS XML = '<DATA>
  <ROW RowNumber="1">
    <COLUMN Name="ProdID" Value="1234" />
    <COLUMN Name="AppID" Value="20144" />
    <COLUMN Name="ConsentDesc" Value="My Description" />
    <COLUMN Name="ConsentVer" Value="" />
    <COLUMN Name="ConsentAcceptance" Value="6789" />
    <COLUMN Name="ConsentType" Value="TermsAndConditions" />
    <COLUMN Name="CreatedDate" Value="8/22/2014 3:04:29 PM" />
  </ROW>
</DATA>'

SELECT  
   m.c.value('@RowNumber', 'varchar(50)') AS RowNumber ,
   m.c.value('COLUMN[1]/@Value', 'varchar(50)') AS [ProdID] ,
   m.c.value('COLUMN[2]/@Value', 'varchar(50)') AS [AppID] ,
   m.c.value('COLUMN[3]/@Value', 'varchar(50)') AS [ConsentDesc.] ,
   m.c.value('COLUMN[4]/@Value', 'varchar(50)') …
Run Code Online (Sandbox Code Playgroud)

xml sql-server

7
推荐指数
1
解决办法
5908
查看次数