我知道 SQL 表上的 INSERT 可能由于多种原因而变慢:
在我的特定情况下,我如何判断哪个负责?如何衡量页面拆分与非聚集索引更新与其他所有内容的影响?
我有一个存储过程,一次插入大约 10,000 行(来自临时表),每 10k 行大约需要 90 秒。这是令人无法接受的缓慢,因为它会导致其他 spid 超时。
我查看了执行计划,我看到了 INSERT CLUSTERED INDEX 任务和 FK 查找中的所有 INDEX SEEKS,但它仍然没有确切地告诉我为什么需要这么长时间。没有触发器,但该表确实有一些 FKey(似乎已正确索引)。
这是一个 SQL 2000 数据库。
我最终想使用 PowerShell 来替换我们用于 SQL 实例监视器的旧 KornShell 脚本。但是,我很难让我的大脑围绕 PowerShell 实际与 SQL Server 通信的所有不同方式。不确定这是否是全部,但我可以通过以下 5 种完全不同的方式查询 SQL 服务器的版本:
1. SQLConnection .NET 类
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=MyServer;Database=Master;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "Select @@version as SQLServerVersion"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
Run Code Online (Sandbox Code Playgroud)
2. WMI 提供程序
$sqlProperties = Get-WmiObject
-computerName "MyServer"
-namespace root\Microsoft\SqlServer\ComputerManagement10
-class SqlServiceAdvancedProperty
-filter "ServiceName = 'MSSQLSERVER'"
$sqlProperties.VERSION
Run Code Online (Sandbox Code Playgroud)
3. SMO
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$smo-var = New-Object …
Run Code Online (Sandbox Code Playgroud) 我在这里感到有点尴尬,我一直将术语“列”和“字段”完全互换使用,这在最近的技术讨论中引起了一些混乱。
但是,有人告诉我,这是不正确的,它应该是(将每个术语翻译成电子表格术语,忽略数据类型和所有其他使数据库有用的东西):
这是正确的吗?我可以发誓,列和字段比这更可互换使用。我当然去过。
所以我们不向表中添加字段,而是向表中添加列,并且字段仅在谈论记录中的数据时才相关?
关于列与字段的其他想法?
编辑:澄清一下,当前上下文是 MS SQL Server。我在 SQL Server 之前的背景是 MS Access,这可能会影响我对这些术语的使用。
我需要将一大堆(100+)大(数百万行)表从一个 SQL2008 数据库移动到另一个数据库。
我最初只是使用导入/导出向导,但所有目标表都缺少主键和外键、索引、约束、触发器等(身份列也被转换为普通的 INT,但我想我只是错过了向导。)
这样做的正确方法是什么?
如果这只是几个表,我会回到源,编写表定义(包含所有索引等)的脚本,然后在目标上运行脚本的索引创建部分。但是有这么多表,这似乎不切实际。
如果没有太多数据,我可以使用“创建脚本...”向导来编写源代码,包括数据,但是 72m 行脚本似乎不是一个好主意!
我通常使用以下方法来确定数据库的每个文件中的可用/已用空间:
Select *, fileproperty(name, 'SpaceUsed') as Used
From dbo.sysfiles
Run Code Online (Sandbox Code Playgroud)
这将返回页面中的总空间和已用空间,然后乘以 8 得到 KB(或除以 128.0 得到 MB)。
我找到了另一个脚本,而不是使用DBCC showfilestats
并dbcc sqlperf(logspace)
返回 TotalExtents 和 UsedExtents,然后可以乘以 64 得到 KB(或除以 16.0 得到 MB)。
忽略额外的列,这两个是否总是为空闲/总空间提供相同的值?怎么样sp_spaceused
?
它们的准确性是否都取决于最近的 DBCC UPDATEUSAGE?
是否有另一种更好的方法来确定已用/可用空间?(我需要这个脚本在 SQL 2000、2005 和 2008 服务器上工作)
部分相关:你能有一个部分分配的范围吗?(例如,仅分配了一个范围内的 8 个页面中的 3 个)
如果您没有听说过,最近发现了一组相关漏洞,这些漏洞影响了过去十年中销售的几乎所有处理器。您可以在 InfoSec.SE 上找到有关崩溃/幽灵漏洞的更多技术细节。
作为 SQL Server DBA,我需要了解什么?
如果我们不与其他公司共享我们的 SQL Server(或我们的虚拟机群),这是否仍然存在风险?
这只是一个操作系统补丁吗?或者是否有可用于解决此漏洞的 SQL Server 补丁/修补程序?将修补哪些 SQL Server 版本?
一些文章预测了 5-30% 的性能影响,尤其是在高度虚拟化的环境中。有什么方法可以预测对我的 SQL Server 的性能影响可能是什么?
我的供应商要求数据仓库数据库区分大小写,但我需要对其进行不区分大小写的查询。
在区分大小写的数据库中,您如何将其编写为不区分大小写?
Where Name like '%hospitalist%'
Run Code Online (Sandbox Code Playgroud) 我们发现 SQL "sa" 帐户的使用方式不该使用,因此我们正在更改所有 SQL 实例的 sa 密码。
(我们有 SQL 2005 到 2017 服务器以混合身份验证模式运行。所有用户和应用程序都应该使用域帐户或非 sa SQL 帐户进行连接。我一直在监视,但没有发现任何其他应用程序、用户或非- 使用 sa 帐户的内部 spid。)
几个问题:
Q1:更改 sa 密码是否需要重新启动 SQL?
我发现一些参考资料说更改 sa 帐户密码后需要重新启动 SQL 服务:
真的吗?还是仅当我更改身份验证模式时?还是仅当我经常以 sa 身份登录时?
这个 SQL Server Central 线程甚至建议更改它可能会影响现有的 SQL 代理作业和其他东西;这是一个问题吗?或者仅当有人将 SA 帐户硬编码到 SSIS 包中时?
(以防万一,我们为 SQL 服务和 SQL 代理服务使用域帐户,为调用 SSIS 包或 PowerShell 脚本的作业使用域代理帐户。)
问题 2:我可以以“正常”方式更改 sa 密码吗?
我可以像重置任何其他帐户一样重置它吗?使用 SSMS,或更可能通过:
ALTER LOGIN sa WITH PASSWORD = 'newpass'; …
Run Code Online (Sandbox Code Playgroud) 帮助!我的主数据库损坏了,我什至无法使 SQL 实例联机!我有哪些选项可以让我的服务器备份?
我确实有 master 的备份,但是MSDN 页面“恢复 master 数据库”要求我以单用户模式启动实例,我做不到!
(注意:我不指定 SQL 版本的这个问题,以便作为更广泛适用的参考。在 DBA.SE 上有一些类似的问题,但没有涉及服务器无法启动的问题。)
目前我们对环境中的 SQL Server 2005/2008/2008R2/2012 服务器上的备份使用标准维护计划,并且始终选中“验证备份完整性”框。
有些备份运行时间很长,因此我建议关闭该选项,但管理层需要我记录此更改的影响和风险。
我了解此选项的使用和历史,对我来说似乎没有必要将备份作业的时间加倍(在我看来),任何可能发生的错误都可能发生在备份步骤期间,而不是在验证期间。
我错了吗?如果我备份到磁盘而不是流式传输磁带或其他东西,关闭它的风险是否最小?(如果相关,我们通过网络备份到 EMC DD-800 备份设备。)
是否有任何关于何时可以安全关闭此功能的官方 MS 建议?
您是否对环境中的每个备份运行“验证”?你抽查他们吗?
编辑:澄清一下,当您在维护计划中检查“验证备份完整性”时,SQL 将在每次备份后立即对每个数据库执行完整的RESTORE VERIFYONLY。这与原始备份一样是数据/IO 密集型,并且(基本上)使备份作业的总时间加倍。这是不一样的使备份的“校验”选项(不能在向导中进行,因为据我所知)。
sql-server ×9
backup ×1
collation ×1
corruption ×1
fields ×1
insert ×1
like ×1
migration ×1
monitoring ×1
patching ×1
powershell ×1
security ×1
terminology ×1