我有一张每天插入和删除的表。平均记录数为 80,000。大约 20 个字段,其中 10 个是 VARCHAR(4000) 但是大多数记录的这些字段为空。1 个 NC 索引占 8MB。
加载此表的作业按预期运行,没有性能问题。
该表每天缓慢增长 1GB,最小记录数增加(有时会减少)。我似乎无法指出是什么导致了这种情况。任何帮助是极大的赞赏!
这个查询有问题:
SELECT *
FROM Sales.SalesOrderDetail sod
JOIN Sales.SalesOrderHeader soh
ON sod.SalesOrderID = soh.SalesOrderID--- adventureworks db
Run Code Online (Sandbox Code Playgroud)
警告
表达式中的类型转换 (CONVERT(nvarchar(23),[soh].[SalesOrderID],0)) 可能会影响查询计划选择中的“CardinalityEstimate”
我正在考虑将数据库从自托管集群迁移到 Microsoft Azure SQL。我知道涉及到一些分布式事务,Azure SQL 不支持这些事务。
有没有一种方法可以记录所有分布式事务及其查询,以便我可以检查客户端应用程序并消除对分布式事务的要求?
我知道如何解决这个问题,但我不明白为什么当我从SSMS运行下面的查询时它会起作用的技术细节运行下面的查询时它可以工作,但当我将它添加为 SQL Server 代理中的作业时相同的查询会失败,这背后的技术细节是什么。
查询:
select LEFT(datediff(day,GETDATE(),'31/08/20'+'26')/365.25,2) AS test
Run Code Online (Sandbox Code Playgroud)
作业失败时我收到的错误:
从字符串转换日期和/或时间时转换失败。[SQLSTATE 22007](错误 241)。这一步失败了。
SQL 代理是否使用不同的引擎或不同的技术?
我有一个存储过程,第一次运行大约需要 15 秒,后续运行需要 1 到 2 秒。如果我等待一个小时并再次运行它,则再次需要 15 秒。
我猜测它在后续运行中使用缓冲池中的缓存数据,而第一次它必须将数据从磁盘加载到缓冲池。我正在尝试调整此存储过程,但第一次运行后我无法测试我的更改,因为它只需要 1 到 2 秒。
我知道我可以使用该DBCC DROPCLEANBUFFERS命令释放缓存并运行我的存储过程,但我不允许在工作中清除缓存。我WITH RECOMPILE也尝试过,但这只会创建一个新计划,但仍然使用缓存的数据。是否有另一种方法强制存储过程不使用缓存数据?
我正在尝试安装支持在 postgresql 中编写 python 的扩展“plpython3u”。
CREATE EXTENSION plpython3u;
错误:
SQL 错误 [22023]:错误:Amazon RDS 不支持扩展“plpythonu”详细信息:安装扩展“plpythonu”失败,因为它不在 Amazon RDS 支持的扩展列表中。
提示:Amazon RDS 允许具有 rds_superuser 角色的用户安装支持的扩展。请参阅:SHOW rds.extensions;
你能推荐一个解决方案吗?
我们正在运行以下版本的 postgresql:
x86_64-pc-linux-gnu 上的 PostgreSQL 12.7,由 gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-12) 编译,64 位
我正在尝试删除 SQL Server 中的临时(系统版本控制)表。我用的是常规DROP TABLE语句。
DROP TABLE [schema].[table]
GO
Run Code Online (Sandbox Code Playgroud)
这引发了以下错误:
表“[database].[schema].[table]”上的删除表操作失败,因为它不是系统版本控制的时态表上支持的操作。
如何删除 SQL Server 中的时态表?
我想问一个关于恢复数据库操作时恢复过程的问题。假设我恢复了一个完整备份,NORECOVERY然后使用NORECOVERY. 最后,我将使用RECOVERY关键字恢复最后的第三个 t-log 备份。
问题是:当我使用RECOVERY关键字恢复最后一个 t-log 备份时,SQL Server 执行重做和撤消阶段还是只执行撤消阶段?
在我看来,当我们使用NORECOVERY关键字恢复备份时,SQL Server 也会执行重做阶段。与使用standby 关键字恢复t-log 备份相同。在这种情况下,SQL Server 会创建一个单独的文件,其名称仅包含“ undo ”而不包含任何“ redo ”。
我试图找出哪个进程正在尝试使用错误的密码连接到我的 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?
我们将我们的数据库从 SQLServer 2012 迁移到 SQLServer 2019。我们的 ETL 是在 Visual Studio 中构建的,并且是从主包设置的。masterpackage 调用不同的包,这些包未部署在 SSIS 中。其中一个包调用存储过程。此存储过程调用不同的存储过程。在旧服务器上,此 SP 步骤需要 4 个小时。在新服务器上,此步骤需要 7 个小时。我们可以做些什么来加快这个过程?数据库的兼容级别会影响这个过程吗?如果我们在 SSIS 中部署包会有所帮助吗?我们愿意接受任何建议。
我们已经尝试过的事情:
感谢您的帮助。埃斯米
sql-server ×9
errors ×2
date ×1
error-log ×1
jobs ×1
optimization ×1
performance ×1
plpython ×1
postgresql ×1
recovery ×1
security ×1
storage ×1
transaction ×1