我们的应用程序由于以下原因突然停止工作The transaction log for database 'tempdb' is full due to 'ACTIVE_TRANSACTION'.。现在,它又开始工作了。但我怎样才能知道这个错误出现的确切原因呢?
我有一个存储时间序列数据的表,大约有 800 万行。表结构如下:
时间戳| 组件 ID | 参数1 | 参数2 | 参数3
我在Timestamp和ComponentID列上有一个聚集索引。(这也是我的主键)
我试图运行的查询是:-
SELECT * FROM table
WHERE Timestamp BETWEEN '2020-01-01'
AND '2020-01-02'
AND ComponentId = 5
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,似乎正在发生 RID 查找。我读过,只有当索引没有覆盖所有内容时才会发生这种情况,但由于我有一个聚集索引,我认为它本身应该覆盖所有内容并阻止查找。如何防止这种查找发生?
我想将三个相关表导出到文件。这三个表相互之间存在关系。有没有一种好方法可以以事务一致的方式 bcp 导出这些表?
SQL Server 数据库备份文件遇到了一个非常奇怪的问题我正在从加利福尼亚州获取石油生产的备份文件。每年都会为当年的数据创建一个同名的数据库。该数据库始终命名为 WellProductionInjection。每年都会创建并填充具有相同内容的相同表格。唯一的区别是表名包含年份,因此每年应该存在单独的表。我可以获得一年内标记为完整备份文件的内容。但是,当我尝试使用 SQL Server Management Studio 将所有备份文件还原到单个数据库时,我只得到一年的数据,或者有关数据库已存在的错误。关于如何处理将多个备份合并到单个数据库中的任何提示?如果有人愿意尝试一下运气,可以将备份文件的示例放在网上。
我试图找出哪个进程正在尝试使用错误的密码连接到我的 SQL Server 实例。日志文件仅包含发起连接的 IP 地址。例子:
日期 4/05/2021 9:43:34 AM 日志 SQL Server(当前 - 5/05/2021 10:11:00 AM)
源登录
消息 用户“SA”登录失败。原因:密码与提供的登录密码不匹配。[客户端:10.120.1.99]
它不会记录来自客户端计算机的哪个 PID 进行了尝试。
我知道我可以使用探查器来找出哪台机器的哪个 PID 对此负责。但我不想为此保持分析器运行。(特别是如果这种情况很少发生,在这种情况下,我需要让分析器运行几天才能捕获这种尝试)。
有没有办法记录此类失败登录的 PID 和 IP?
我想知道是否有人知道查询 SQL Server 的“强制加密”是否设置为 true 的方法。
我知道我可以检查sys.dm_exec_connections当前连接是否已加密,但这并不能真正得到我想要的东西。false如果客户端请求加密,即使设置为“强制加密”,所有连接仍然可以加密。
我正在构建一个报告,扫描我们环境中的所有 SQL 服务器,以针对我们的最佳实践设置进行测试,以便我们可以修复错误配置的系统。由于报告将按计划运行,依赖sys.dm_exec_connections可能会给我一种错误的安全感,因为在报告运行时所有连接都可以加密,但五秒钟后某些连接未加密。我们的目标是尝试让所有 SQL 服务器强制加密,然后能够报告异常情况。
我正在使用 Azure SQL DB,并注意到我最大的数据库之一似乎有一个总大小为 6Gb 的主键索引。它是uniqueidentifier. 但是,在任何给定时间点,表中的总行数仅约为 78k 行。
该表存储出站电子邮件和短信,因此它会定期填满并清空。我们还对整个数据库进行每周索引维护,因此我试图理解为什么这个 PK 索引看起来远远大于其应有的值。
在某些情况下,HTML 电子邮件的大小几乎为 50KB。
根据我自己的本地测试,从该表中删除行似乎确实减少了 PK 的大小,但这似乎不会在生产数据库上发生。
然后我有什么选择来减少这个索引大小并释放我想象的大量未使用的空间。
无论 where 子句如何;
当表是堆(没有聚集索引)时,选择查询是否会使sql server锁定所有行,直到它完成读取所有行?
在具有聚集索引的表的情况下,sql server将逐一锁定行并在读取该行后立即释放它们?
有关此主题的任何参考链接都会非常有帮助。
我有以下(愚蠢地简化的)查询,它利用两个引用同一个表的 CTE 并将它们相互连接:
WITH CTE1 AS
(
SELECT dbo.RemoveNonNumericCharacters(PhoneNumber) AS PhoneNumberCleaned
FROM PhoneNumbersTable
GROUP BY dbo.RemoveNonNumericCharacters(PhoneNumber)
),
CTE2 AS
(
SELECT CTE1.PhoneNumberCleaned
FROM CTE1
INNER HASH JOIN PhoneNumbersTable
ON CTE1.PhoneNumbersCleaned = dbo.RemoveNonNumericCharacters(PhoneNumbersTable.PhoneNumber)
WHERE PhoneNumbersTable.AreaCode IN (718, 212)
)
SELECT PhoneNumberCleaned
FROM CTE2
Run Code Online (Sandbox Code Playgroud)
注意HASH JOIN里面发生的事情CTE2。到目前为止,这一切都运作良好。
如果我将以下WHERE子句添加到最终SELECT查询中,那么我的整个查询现在变为:
WITH CTE1 AS
(
SELECT dbo.RemoveNonNumericCharacters(PhoneNumber) AS PhoneNumberCleaned
FROM PhoneNumbersTable
GROUP BY dbo.RemoveNonNumericCharacters(PhoneNumber)
),
CTE2 AS
(
SELECT CTE1.PhoneNumberCleaned
FROM CTE1
INNER HASH JOIN PhoneNumbersTable
ON CTE1.PhoneNumbersCleaned …Run Code Online (Sandbox Code Playgroud) 我需要更新分区表中的数十亿行;更新也可能会在分区之间移动数据。我试图弄清楚作为单个事务执行此操作需要多少额外的日志空间(我意识到我最好批量处理这项工作,但我试图避免这种情况)。我想尝试一个较小的集合,这样我就可以看看它在规模上需要什么。是否有任何我可以监控的系统管理视图可以帮助我解决这个问题?
sql-server ×10
backup ×1
bcp ×1
disk-space ×1
error-log ×1
errors ×1
heap ×1
hints ×1
index-tuning ×1
primary-key ×1
restore ×1
security ×1