我有一个每月的 ETL 过程,太复杂了,在这里解释不了,但基本上我们获取大量客户数据,将其批量加载到各种表中,然后运行一系列构建过程。
总数据量很大,我们每个月增加25-30m记录到最大的表,总共有大约700m记录。每个都有 2m-300m 记录的支持表。该集合的总数据约为 3.5TB。
本月,某些流程所需的时间比平时长得多。一个例子是一个通常在 30 分钟内完成的过程,在我杀死它之前花了大约 40 小时(它仍然没有完成)。
并非所有进程都受到影响,有些进程甚至比平时运行得更快。
显然,根本原因超出了我在这里可以问的范围,但有一些事情困扰着我:
我们有实际的查询计划,以数百万% 显示单个运营商。
像对 的聚簇索引扫描791,358,704%、对 的合并连接75,566,494%等。这发生在多个查询计划中,而这些计划取自sys.dm_exec_query_plan。
这些查询计划是否表明了其他一些更大的问题?
我确信问题不是过时的统计数据 - 我们对所有主要表以及最大的表和数据库进行了全扫描,我手动重建了预先调整大小以消除碎片。
我正在尝试找到一种使用 HierarchyID 获取给定节点的所有祖先节点的方法。我见过的每个使用 HierarchyID 的解决方案似乎都使用 CTE 或变量。有没有办法使用单个 select 语句来做到这一点?
为了让事情更简单:
CREATE TABLE Employee
(
EmpId INT PRIMARY KEY IDENTITY,
EmpName VARCHAR(100) NOT NULL,
Position HierarchyID NOT NULL
)
INSERT INTO Employee (EmpName, Position)
VALUES ('CEO', '/'),
('COO', '/1/'),
('CIO', '/2/'),
('CFO', '/3/'),
('VP Financing', '/3/1/'),
('Accounts Receivable', '/3/1/1/'),
('Accountant 1', '/3/1/1/1/'),
('Accountant 2', '/3/1/1/2/'),
('Accountant 3', '/3/1/1/3/'),
('Accounts Payable', '/3/1/2/'),
('Accountant 4', '/3/1/2/1/'),
('Accountant 5', '/3/1/2/2/'),
('DBA', '/2/1/'),
('VP of Operations', '/1/1/')
Run Code Online (Sandbox Code Playgroud) 我最近使用DBCC CHECKDB WITH REPAIR ALOW DATA LOSS.
现在我可以从表值函数中选择记录来检索销售记录,但是对相同数据使用 GROUP BY 会导致“内部不一致”错误。
运行 DBCC CHECKDB 返回零不一致错误。
我已经运行了我所知道的一切来检测任何撕裂的页面,但没有找到。
如何找到撕裂的页面或强制重建?
我刚刚在一台新的笔记本电脑上安装了 Win7,并想在上面安装一个轻量级的 MS Sql Sever。VS2010 已经安装了 SS2008 Express。所以现在我只需要一个管理工作室。
你会推荐什么?我看到有一个 Management Studio Express,并且还了解到您可以从 SS2008 完整光盘安装 Management Studio。有没有首选路线?
以前,在 ServerFault 上,我问了一个关于备份和恢复 Sql Server 2008 文件组的问题。
今天,当我尝试RESTORE这些FILEGROUP备份之一时,出现以下错误:-
Processed 1895080 pages for database 'XWing', file 'XWing' on file 1.
Processed 4 pages for database 'XWing', file 'XWing_log' on file 1.
The database cannot be recovered because the log was not restored.
The database cannot be recovered because the log was not restored.
The roll forward start point is now at log sequence number (LSN) 221218000000010400001. Additional roll forward past LSN 221218000000010400001 is required to …Run Code Online (Sandbox Code Playgroud) 我在 SQL 2008 上设置了事务复制,并且有问题的文章将“复制非聚集索引”设置为 TRUE。
如果我在发布者上添加一个非聚集索引(使用 CREATE INDEX),它会立即推送给订阅者吗?
还是我需要运行快照?
SQL Server 2008需要在分区上创建唯一的非聚集索引,以在索引定义中包含分区字段。
我想知道为什么。
我到处搜索,网上没有答案。stackoverflow 上有一个类似的问题,但它并不完全相同,并且没有公认的答案。
当我在队列上设置事件通知时,它会创建一个队列监视器,如果从该队列接收消息导致有害消息,队列监视器就会消失。它不在“RECEIVE”或“INACTIVE”中,它只是下降。并且在使用ALTER QUEUE somequeue WITH STATUS = ON;队列监视器启用队列后不会重新出现,我需要删除并重新创建事件通知以使事件通知再次工作。
所以问题是,这是有意为之吗?在我重新启用中毒消息后的队列之后,重新创建事件通知是一种常见的做法。
谢谢!
我从另一个人那里得到了这个错误,我已经没有想法了。我可以毫无问题地访问这个数据库,数据库处于 MULTI_USER 模式,收到错误的人是用户等。
数据库是 READ_ONLY 并且有问题的用户以前使用过这个数据库并且只有数据库读取权限,所以没有设置被篡改的机会。
昨天,我添加了一些函数,不得不设置为 SINGLE_USER 和 READ_WRITE,但我已经三重检查了 db 是否已设置回 MULTI_USER。我无法确定这是巧合还是因果关系。无论哪种方式,我都处于死胡同。
这是错误报告:
The database [dbName] is not accessible. (Object Explorer)
----------------------------------------
Program Location:
at Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.DatabaseNavigableItem.get_CanGetChildren()
at Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.NavigableItem.RequestChildren(IGetChildrenRequest Request)
at Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.ExplorerHierarchyNode.BuildChildren(WaitHandle quitEvent)
Run Code Online (Sandbox Code Playgroud)
有这种错误的经验吗?
我使用的是 SQL Server 2008 R2,当我查看 SQL Server 的服务时,我看到有两种不同的服务具有不同的实例。
SQLEXPRESS MSSQLSERVER谁能帮我弄清楚#1 和#2 之间的区别?
提前致谢
sql-server-2008 ×10
sql-server ×5
backup ×1
dbcc ×1
filegroups ×1
partitioning ×1
performance ×1
replication ×1
restore ×1
ssms ×1
t-sql ×1