标签: sql-server

触发无限期的 WAITFOR 会增加日志文件的大小吗?

在我的应用程序的最后一个版本中,我添加了一个命令,告诉它在 Service Broker 队列中有东西到达时等待:

WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM MyQueue)
Run Code Online (Sandbox Code Playgroud)

DBA 告诉我,自从添加以来,日志大小已经飙升。这可能是正确的吗?还是我应该去别处寻找?

sql-server-2005 sql-server service-broker

17
推荐指数
2
解决办法
983
查看次数

DBCC CHECKDB 无法修复的损坏:索引视图包含不是由视图定义生成的行

TL;DR:我在索引视图中有一个无法修复的损坏。以下是详细信息:


跑步

DBCC CHECKDB([DbName]) WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS

在我的数据库之一上产生以下错误:

消息 8907,级别 16,状态 1,第 1 行 空间索引、XML 索引或索引视图“ViewName”(对象 ID 784109934)包含不是由视图定义生成的行。这不一定表示此数据库中的数据存在完整性问题。(……)

CHECKDB 在表“ViewName”中发现 0 个分配错误和 1 个一致性错误。

repair_rebuild 是最低修复级别 (...)。

我确实理解此消息表明索引视图“ViewName”的物化数据与基础查询生成的数据不同。但是,手动验证数据不会出现任何差异:

SELECT * FROM ViewName WITH (NOEXPAND)
EXCEPT
SELECT ...
from T1 WITH (FORCESCAN)
join T2 on ...

SELECT ...
from T1 WITH (FORCESCAN)
join T2 on ...
EXCEPT
SELECT * FROM ViewName WITH (NOEXPAND)
Run Code Online (Sandbox Code Playgroud)

NOEXPAND用于强制在 上使用(唯一)索引ViewNameFORCESCAN用于防止索引视图匹配发生。执行计划确认这两种措施都有效。

这里没有返回任何行,这意味着两个表是相同的。(只有整数和 guid 列,排序规则不起作用)。

无法通过在视图上重新创建索引或运行DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS …

sql-server materialized-view corruption dbcc-checkdb

17
推荐指数
2
解决办法
2217
查看次数

PostGIS 与 SQL Server 的 GIS 数据

所以我最近在一家新公司开始工作,有很多 ArcGIS 用户似乎非常热衷于使用 PostGIS 实例为我们的客户提供一些数据。虽然我对此没有意见,但我们是 95% 的 SQL Server 和 5% 的 Oracle 商店。我们当前的内部 GIS 运行在 SQL Server 上,我还没有听到任何抱怨。

我知道 SQL Server 截至 2012 年有很多改进的空间/几何功能,但是 PostGIS 中是否有任何值得进入新平台的杀手级功能?我试图研究它,但找不到任何真正深入的东西,或者这不完全是偏见。

我想给他们最好的工具来完成他们的工作,但也必须权衡一个事实,即我将从一开始就学习 Postgres/GIS,这本身就是一个完整的旅程。

sql-server database-recommendation spatial postgis

17
推荐指数
2
解决办法
1万
查看次数

在 SQL Server 中同步两个数据库

我有两个 SQL Server 数据库。一个是客户端(Windows 应用程序),第二个是在服务器上。我想每隔一段时间(例如每 2 分钟!)同步这两个数据库。

我已经阅读了不同的同步方式,如复制、时间戳、使用触发器的日志表、Microsoft 同步框架等。

实际上,我不喜欢使用可能是黑匣子(如复制)的同步方法,因为我不希望在更新 SQL Server 特定表并将它们与服务器同步时被阻止。

  1. 你认为我应该在这种情况下使用哪种方法?请记住,每隔几分钟我必须从客户端向服务器发送几个表更改,并从服务器获取两个表更改。

  2. 我发现了一种奇怪但新颖的方法。是否有可能我在客户端记录所有已执行的(对于特定的首选)存储过程,并将它们与它们的参数一起发送.sql到服务器并在那里执行它们?同样的事情也会发生在服务器上并发送到客户端。你认为这是一个简单而有用的方法吗?

  3. 如果可以,请给我建议任何有用的方法。非常感谢。

编辑:请记住,这是一个实时同步,这使它很特别。这意味着当客户端用户使用该表时,与服务器的同步过程必须每隔几分钟发生一次,因此不必锁定任何表。

sql-server data-synchronization

17
推荐指数
2
解决办法
8万
查看次数

使用 SQL Server 2016 system-versioned temporal table for Slowly-Changed Dimensions 的查询策略

当使用系统版本控制的时态表(SQL Server 2016 中的新功能)时,当使用此功能处理大型关系数据仓库中的缓慢变化维度时,查询创作和性能影响是什么?

例如,假设我有一个Customer带有Postal Code列的 100,000 行维度和一个Sales带有CustomerID外键列的数十亿行事实表。并假设我想查询“按客户邮政编码划分的 2014 年总销售额”。简化的 DDL 是这样的(为了清楚起见省略了很多列):

CREATE TABLE Customer
(
    CustomerID int identity (1,1) NOT NULL PRIMARY KEY CLUSTERED, 
    PostalCode varchar(50) NOT NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL, 
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL,   
    PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime) 
)
WITH (SYSTEM_VERSIONING = ON);

CREATE TABLE Sale
(
    SaleId int identity(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    SaleDateTime …
Run Code Online (Sandbox Code Playgroud)

data-warehouse sql-server slowly-changing-dimension temporal-tables sql-server-2016

17
推荐指数
1
解决办法
1214
查看次数

如何将 SQL Server 死锁报告中的键转换为值?

我有一份死锁报告,告诉我有一个涉及到的冲突

waitresource="KEY: 9:72057632651542528 (543066506c7c)"
Run Code Online (Sandbox Code Playgroud)

我可以看到这个:

<keylock hobtid="72057632651542528" dbid="9" objectname="MyDatabase.MySchema.MyTable" indexname="MyPrimaryKeyIndex" id="locka8c6f4100" mode="X" associatedObjectId="72057632651542528">
Run Code Online (Sandbox Code Playgroud)

该范围内<resource-list>的元素。

我希望能够找到键的实际值(例如,id = 12345)。我需要使用什么 SQL 语句来获取该信息?

sql-server deadlock primary-key sql-server-2012

17
推荐指数
4
解决办法
1万
查看次数

每周重建索引是个好主意吗?

我们有一位 SQL 专家建议每周重建我们的表索引。我们目前正在这个星期六晚上进行,它会在重建过程中导致很多超时。如果可能,我想避免超时,那么进行每周索引重建是个好主意吗?

我们正在运行 MS SQL Server 2014。

更新我们在重建过程中收到此错误“System.Data.SqlClient.SqlException:超时已过期。操作完成之前超时时间已过,或者服务器没有响应。”

谢谢!

sql-server sql-server-2014

17
推荐指数
1
解决办法
3109
查看次数

递归 CTE 以找到所有孩子的总数

这是一个装配树,我想使用递归T-SQL查询(大概CTE)和下面的预期结果进行搜索。我想知道给定任何零件的每个组件的总量。

这意味着如果我搜索“铆钉”,我想知道程序集中每个级别的总数,而不仅仅是直接子项计数。

Assembly (id:1)
    |
    |-Rivet
    |-Rivet
    |-SubAssembly (id:2)
    |   |
    |   |-Rivet
    |   |-Bolt
    |   |-Bolt
    |   |-SubSubAssembly (id:3)
    |      |
    |      |-Rivet
    |      |-Rivet
    |
    |-SubAssembly (id:4)
       |-Rivet
       |-Bolt

    DESIRED Results
    -------
    ID, Count
    1 , 6
    2 , 3
    3 , 2
    4 , 1
Run Code Online (Sandbox Code Playgroud)

目前,我可以获得直接父母,但想知道如何扩展我的 CTE 以允许我向上滚动此信息。

With DirectParents AS(
--initialization
Select InstanceID, ParentID
From Instances i 
Where i.Part = 'Rivet'

UNION ALL
--recursive execution
Select i.InstanceID, i.ParentID
From PartInstances i  INNER …
Run Code Online (Sandbox Code Playgroud)

sql-server cte t-sql recursive

17
推荐指数
1
解决办法
1万
查看次数

延长事件持续时间是毫秒还是微秒?

在这个论坛上有一个关于扩展事件module_end持续时间单位的问题,我回答了这个问题。详情请看这里

对于所有事件,它总是以微秒为单位吗?

sql-server extended-events

17
推荐指数
1
解决办法
1万
查看次数

10 TB 数据库备份/恢复问题

我们有一个非常大的生产数据库,有 10 TB。我们正在考虑将其迁移到云服务,但我必须了解风险并估计整个过程的持续时间。我使用 Native SQL Server 2014 SP2 备份解决方案每月备份一次数据库。持续时间几乎是 720 分钟 - 12 小时。压缩比为 5,这意味着备份大小几乎为 2 TB。我们负担不起差异备份,因为累积的差异备份需要与完整备份一样多的时间和空间,因此我们进行 T-log 备份(每个 ~200 Mb)而不是每 10 分钟 ~ 每天 144 个文件。最大的问题是拥有所有这些统计数据,有没有人知道恢复包含 10 TB 数据的 2 TB 备份需要多长时间?它会比完整备份持续时间长得多吗?

sql-server backup restore

17
推荐指数
2
解决办法
5770
查看次数