我刚刚收到有关 SQL Server 2005 实例的以下通知。该实例的核心与 tempdb 文件的比率为 2:1,tempdb 文件总数为 24 个文件。不应该发生争用 - 我将如何检测这种争用的来源?TempDB 和所有其他数据库都通过 10 GB 以太网存储在 SAN 存储上。SAN 在一个 RAID-60 阵列中配置了 46 个 10k SAS 驱动器。该阵列与多个 VMWare 服务器和一个或两个 Exchange 服务器共享。
来自 Idera SQL 诊断管理器的通知:
2012 年 11 月 8 日下午 10:49:00,MGSQL01 上的 Tempdb 争用 (ms) 至关重要。
在 MGSQL01 上检测到 Tempdb 闩锁争用。检测到的总等待时间为 1782 毫秒。这表明性能受到 tempdb 中分配映射争用的影响。如果这是一个常规问题,可以通过遵循有关 tempdb 文件计数、大小和 IO 子系统的最佳实践来缓解。
PFS 等待时间:1782 ms GAM 等待时间:0 ms SGAM 等待时间:0 ms
Tempdb 争用 (ms):tempdb 分配映射(GAM、SGAM 和 PFS)的当前等待时间,以毫秒为单位。此警报只能在运行 SQL 2005 或更高版本的实例上引发。
我正在使用 2 个在 Windows Server 2012 上运行 SQL Server 2012 的 SQL Server 设置 DEV/TEST 环境。我们正在从 Windows Server 2008 上的 SQL Server 2005 迁移,在那里我们已经正确启动并运行。
在 SQL Server 2012 中,Kerberos 身份验证不起作用。
每个服务器都有自己的 Active Directory 帐户,该帐户具有通过 Active Directory 用户和计算机授予的“写入服务主体名称”和“读取服务主体名称”权限。每当我连接到 SQL Server 2005 服务器并运行:
SELECT net_transport, auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
Run Code Online (Sandbox Code Playgroud)
我懂了:
net_transport auth_scheme
TCP KERBEROS
Run Code Online (Sandbox Code Playgroud)
当我对新的 SQL Server 2012 实例执行相同的查询时,我看到:
net_transport auth_scheme
TCP NTLM
Run Code Online (Sandbox Code Playgroud)
如果我SetSPN -Q MSSQLSvc/*用来查询服务主体名称的活动域,我会看到列出的 2005 和 2012 服务器,除了服务器名称之外,其他方式完全相同。
例如:
MSSQLSvc/SERVERa2005.domain.inet
MSSQLSvc/SERVERa2005domain.inet:1433
MSSQLSvc/SERVERb2005.domain.inet
MSSQLSvc/SERVERb2005domain.inet:1433
MSSQLSvc/SERVERa2012.domain.inet
MSSQLSvc/SERVERa2012domain.inet:1433 …Run Code Online (Sandbox Code Playgroud) 我想每 3 秒运行一次作业,但是在 SQL Server 2008 中我们不能定义小于 10 秒的间隔。
该作业用于将访问者信息和细分信息插入/更新到由谷歌搜索跟踪的数据库中。
在 2 或 3 秒内最多插入大约 100 行。该作业插入并更新数据库中的表。有没有办法使用sp作业调度配置来调度它?
我已将我场的作业集中在 MSX 中,涵盖大约 70 个 SQL Server 实例。看似随机,至少每周一次,有几个实例将停止接受指令。内MSX窗口管理目标服务器,而不是显示所有实例的标准,它们显示为正常,阻止。我无法弄清楚为什么会发生这种情况。叛逃和重新入伍通常可以治愈这种病,但这意味着必须在任何适当的工作中重新添加该目标,因此我宁愿解决原因而不是忍受变通方法。
有什么建议吗?我想继续使用 SQL Server 的工具进行多服务器管理,但我对其他途径持开放态度。
我对带有 FILESTREAM 的表上的 ROWGUID 列的要求感到困惑。这个专栏将如何使用?
如果我在同一个表上使用不同的主键(聚集),同时让该 ROWGUID 列“就在那里”而没有聚集索引,是否可以?
像这样:
CREATE TABLE Sample
{
-- This is going to be clustered
[Id] int NOT NULL,
-- What shall I do with it index-wise?
[RowGuid] uniqueidentifier ROWGUIDCOL NOT NULL UNIQUE
}
Run Code Online (Sandbox Code Playgroud) 我在 Linux Centos 上有 MySQL 5.1.35。Linux 服务器有 2GB RAM 和 14GB 磁盘空间。
我使用 Java 中的 Restlet 框架创建了一些 Web 服务,该框架拥有 1,000 多个用户。
我应该max_connections为最大并发连接设置什么?
当我执行下面的两个查询时,
SELECT
session_id, transaction_id
FROM sys.dm_tran_session_transactions;
Run Code Online (Sandbox Code Playgroud)
和
SELECT
session_id, request_id, at.transaction_id
FROM sys.dm_tran_active_transactions at
JOIN sys.dm_exec_requests r
ON r.transaction_id = at.transaction_id;
Run Code Online (Sandbox Code Playgroud)
我已经阅读了1和2的 BOL,但没有看到任何关于为什么会出现差异的明确解释。
我得到不同的结果。前一个查询不返回任何结果,但后者返回带有会话和事务 ID 的活动事务。该request_id是0,我认为它,意味着它在会议上提出的唯一请求。有人可以帮助我理解为什么我上面查询的两个概念之间存在差异吗?
编辑
我只是重新运行了查询,现在我得到了第一个 DMV 的结果,该结果session_id实际上并未包含在第二个结果集中。
我使用带有PostGIS的 PostgreSQL 9.3来存储位置更新。更新写入两个表 -location_updates和location_updates_history.
每个人都有:
car_idgeom 柱子每次更新都会写入location_updates表,然后触发器函数会将相同的更新写入location_updates_history. 更新后,除最新的 10 个更新外,所有更新都car_id将被删除。因此,该location_update表以移动窗口的方式包含了每辆车的最新 10 次更新,并且该location_updates_history表包含了它的完整历史记录。
我发现我只需要每辆车的最新更新,而不是最新的 10,所以我运行以下命令:
DROP TRIGGER location_update_insertion_trigger ON location_update;
DELETE FROM location_update WHERE id NOT IN
(SELECT max(id) FROM location_update GROUP BY cat_id);
ALTER TABLE location_update DROP COLUMN id CASCADE;
ALTER TABLE location_update ADD PRIMARY KEY (car_id);
Run Code Online (Sandbox Code Playgroud)
经过几个小时的工作,数据库处于完全锁定状态 - 非常糟糕,甚至其架构上的 pg_dump 也被阻止了。
在 …
正在SQL Server 2012 (11.0.6540.0)与另一台服务器一起在 AO 高可用性组中运行。
tempDB 使用量通常约为 819MB(从 2 周前开始平均超过一周),但由于我们进行了故障转移和补丁周期,tempDB 开始逐渐增长(此时未进行 DDL 更改)。我们刚刚完成了一个测试故障转移,并将 tempDB 从两台机器都可以访问的联合 SAN 驱动器上移开,(我们不希望一个硬件可以同时关闭我们的主要和次要副本)。
最近的故障转移和实例重新启动(移动 tempDB)看到 tempDB 使用量跃升至 6348MB,并且其缓慢增长。
增长全部在内部对象上,可以使用以下方法查看:
SELECT top 5 session_id, request_id,
SUM(internal_objects_alloc_page_count) AS request_internal_objects_alloc_page_count
FROM sys.dm_db_task_space_usage
GROUP BY session_id, request_id
ORDER BY request_internal_objects_alloc_page_count DESC
Run Code Online (Sandbox Code Playgroud)
看看它,它都是从 spid 35 和 32 运行的,它们都与服务代理相关。
我环顾四周,有人谈论这是由于进行WITH CLEANUP了最后的对话,但清理这个词只出现在评论中,所以我相信这不是问题。
当实例恢复并接管主节点时,服务代理不工作,所以我需要将所有队列循环到禁用然后启用状态(我们在一年前必须这样做,但没有请参阅此问题)。
您可以在此处查看 tempDB 上的使用情况,因为它目前在过去 4 天中保持不变。今天早上的下降是实例重启和故障转移。
有谁知道我缺少什么来控制它。
这是我的 SQL Server 存储过程,如下所示:
CREATE PROCEDURE passenger_details
AS
BEGIN
SELECT Full_Name, Age, Nationality, Category, Airline_Name, Class_Type
FROM Passenger, Ticket, Airline, Class
WHERE Passenger.Passenger_No=Ticket.Passenger_No AND Airline.Airline_No=Ticket.Airline_No AND Class.Class_No=Ticket.Class_No
END
EXECUTE passenger_details
Run Code Online (Sandbox Code Playgroud)
SQL Server 中的上述存储过程成功运行。
然后我尝试在 Oracle PL/SQL 中执行相同的存储过程,如下所示:
CREATE OR REPLACE PROCEDURE passenger_details
(p_passenger_details OUT SYS_REFCURSOR)
AS
BEGIN
OPEN p_passenger_details FOR
SELECT Full_Name, Age, Nationality, Category, Airline_Name, Class_Type
FROM Passenger, Ticket, Airline, Class
WHERE Passenger.Passenger_No=Ticket.Passenger_No AND Airline.Airline_No=Ticket.Airline_No AND Class.Class_No=Ticket.Class_No;
END passenger_details;
Run Code Online (Sandbox Code Playgroud)
以上Oracle PL/SQL中的存储过程编译成功。
然后我尝试执行它,如下所示:
SET SERVEROUTPUT ON;
EXECUTE passenger_details;
Run Code Online (Sandbox Code Playgroud)
在尝试执行存储过程时,我收到以下错误消息,如下所示:
Error …Run Code Online (Sandbox Code Playgroud)