我知道以前有人问过这个问题。我一直在遵循MSQL Tips 中广泛的故障排除步骤以及我可以在 Google 上找到的每个答案。我真的很难过。
错误如下:
我似乎无法克服这个错误。每次安装/卸载 MS SQL Server 时,我都会收到相同的错误。我什至对笔记本电脑进行了硬重置,甚至删除了 BIOS 信息,但我仍然遇到相同的错误。我发现 MS SQL Server 的安装是并发的,所以这可能解释了它。
我什至设置了一台运行 Windows 7 的虚拟机进行调试并得到完全相同的消息。该应用程序可以在不同的工作站上运行并完美运行。似乎问题是硬编码到我的计算机上。
我正在配置一个作业以获取违规进程的SPID并将其终止。我正在使用来自@AdamMachanic的伟大sp_Whoiscative和在登录名和 SPID 和session_id值上加入sysprocesses之间的混合,因为这些值应该是相同的(或者我错了,那是我的错误?)。
我得到了一些我不明白的东西:对于来自 sysprocesses的相同SPID,我从 whoisactive 结果中得到不同的 session_id值。这里有什么不正确?
这是我正在使用的代码。在当前日期时间之前 10 秒获取值的过滤器是因为 whoisactive 正在使用参数 @deltainterval 运行,每次运行需要大约 10 秒来执行。
USE master;
-- Log information about current running processes to table Log_WhoIsActive
EXEC [master].[dbo].[sp_WhoIsActive]
@get_full_inner_text = 1,
@get_plans = 2,
@get_outer_command = 1,
@get_transaction_info = 1,
@get_task_info = 2,
@get_locks = 1,
@get_avg_time = 1,
@get_additional_info = 1,
@delta_interval = 2,
@sort_order = '[start_time] DESC',
@destination_table = 'Log_WhoIsActive_tests';
--compare date from …Run Code Online (Sandbox Code Playgroud) performance sql-server stored-procedures execution-plan sql-server-2014 query-performance
http://pastebin.com/index.php?e=1我知道您可能在职业生涯中多次或至少听说过一次这个问题,但这已经成为我们环境中巨大的性能问题。
数据库大小:压缩后1 TB表大小:800 GB,超过十亿条记录
应用程序通常查询存储过程,当他们运行报告时,它通常调用存储过程并最终查询巨大的视图(它有接近 900 列,视图中的一个表是上面提到的 800GB 表)。
环境概述:
SQL 2014 企业版,Always On 无表分区(计划今年实施) Windows 2012 标准内存:512,490 GB 分配给 SQL Server CPU:16 核
问题:当报表运行时,它调用存储过程,存储过程最终根据用户选择的动态参数生成动态 SQL。因此,这里的问题是每次执行都会在计划缓存中生成新计划。
每当出现问题时,我们都会通过添加/删除一些过滤器作为临时解决方法来调整内部代码,但我们在这里寻找的是找到解决此问题的最终解决方案。
我们做过的事情:
要做的事情:
表分区 - 我正在考虑创建过滤索引。如果您遇到任何这些问题,请告诉我您的想法或建议。
我有两个相同的表并保存相同的数据行。
一个为表的每一列使用 varchar(255),另一个为每列正确键入(使用日期、整数、十进制等)。
使用 Management Studio 的属性窗口,我可以看到将所有数据存储为 varchar 的表要小得多,这不是我期望看到的。我的理解是 int 只使用 4 个字节的空间,因此使用的空间比存储为 varchar 的 int 少得多。
我应该寻找什么来了解这里发生的事情?两个表在 int 列上都有一个主键,没有其他索引。出于测试目的,它们填充了来自同一源查询的相同数据集。
假设您有一个地址表,如下所示:
dbo.Address
(
AddressId INT PRIMARY KEY,
CustomerId INT,
IsPrimary BIT,
...
more typical address fields
...
)
Run Code Online (Sandbox Code Playgroud)
我想要一个检查约束来强制每个客户始终只有一个主要地址,允许我为客户切换主要地址或添加新地址并使其成为主要地址。
我知道我可以有一个约束,即不超过一个是主要的(允许没有一个是主要的),然后在插入/更新一个地址为主要地址之前将所有客户的地址设置为非主要地址。但是,如果客户有地址,其中之一必须始终具有 IsPrimary = 1,我将如何强制执行?
我会用一个例子来解释这个问题。
一个查询,将选择并显示我所做的提款流程并显示我的存款余额状态。
Deposit创建一个包含列TotalAmount, 的表DepositDate。另一个表
Withdrawal是用列WithdrawAmount,来创建的WithdrawDate。
所以我使用 SELECT 查询从带有公式的两个表中进行选择:
SELECT WithdrawAmount,
CASE WHEN ( TotalAmount - WithdrawAmount) = 0 THEN 'ZeroBalanceOops'
ELSE 'StillAvailableYAY' as 'Status'
FROM Deposit Inner Join Withdraw WHERE [WithdrawDate] between this month beginning and ending
Run Code Online (Sandbox Code Playgroud)
所以对于这个查询,假设我有 500 的存款,并且只会存款一次。如果我这个月只提现一次,然后把押金全部提现,效果会很好。结果将显示如下:
| WithdrawAmount | Status |
| 500 | ZeroBalanceOops |
Run Code Online (Sandbox Code Playgroud)
但是,如果我在一个月内提款不止一次,并且这些提款将使余额 = 0,则它不起作用。假设存款再次为 500,结果将显示如下:
| WithdrawAmount | Status |
| 250 | StillAvailableYAY |
| 250 | StillAvailableYAY | …Run Code Online (Sandbox Code Playgroud) 环境
Windows: 2012 R2 Standard
SQL: SQL 2014 Enterprise Edition
Setup: Two Node Windows Failover cluster with SAN
Run Code Online (Sandbox Code Playgroud)
变化:
我们希望通过添加在 DR 站点上运行的第二个 SQL 实例将可用性组引入实例。它将是带有附加驱动器的虚拟服务器。对于 Clarity,我们将在两个节点集群上运行的 SQL 实例调用,SAN 作为 S1,在 DR 站点的第二个 SQL 实例作为 S2
问题:
将 S2 添加到 S1 集群后,我们可以创建 AG 组吗?如果 S1 发生故障并故障转移到节点 2,AG 是否会故障转移到 S2 实例?
通过在使用 AG 设置的新服务器上创建两个实例来重新开始,然后将数据库迁移到它们?
许可 - 我们是否必须为主实例和辅助实例支付许可费用,即使一切都将在主实例上运行并且在主实例出现故障时进行故障转移?
谢谢!
我们的数据库有一个 SQL Server 2008R2 企业版来支持前端应用程序。我们以前从未遇到过超时问题。最近,该公司决定将数据库升级到 SQL Server 2014 企业版,其中 2 个节点始终处于群集设置。新服务器比旧服务器具有更好的 CPU、内存。
升级后我做了所有必要的修改,检查数据库一致性,运行 DBCC UPDATEUSAGE,更新统计信息,重建索引,重新编译存储过程等等。数据库切换和迁移一切顺利。但是,我们的用户开始抱怨超时问题。
我一直在查看不同的文章、博客文章并进行了一些修改,例如更改连接字符串和添加 MultiSubnetFailover = 'True',这似乎有很大帮助并最大限度地减少了超时频率,但问题仍然存在。有谁知道是什么导致了这个问题以及如何解决它?我非常感谢您提出的解决此问题的建议和建议。
sql-server-2008 php availability-groups sql-server-2014 timeout
我正在拼命寻找一些逻辑或脚本来检查命令,msrepl_commands其中已经移动到订阅者但尚未删除的命令数量。
我正在手动运行该程序:
EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72
Run Code Online (Sandbox Code Playgroud)
但它没有删除任何行,即使我检查msrepl_commands并发现有 20M 行都出现在 2016-08-30 00:01:00 AM 和 2016-08-31 09:00:00 AM 之间,但是如果我运行分发清理然后它应该在循环中删除前 10K,直到行数达到 2000。
我对如何检查那些传递的命令感到有些困惑(msdistribution_status给了我分散的和未分散的命令,但这是累积的,我需要当前状态)。
sql-server-2014 ×10
sql-server ×7
performance ×2
clustering ×1
datatypes ×1
odbc ×1
php ×1
replication ×1
select ×1
t-sql ×1
timeout ×1