我已手动将 mdf/ndf 文件调整为较大的大小,以避免对 SQL Server 数据库进行自动增长操作。由于文件较大,磁盘分区上的可用空间很少,系统管理员不断提醒我空间不足。
因为我调整了它们的大小,所以数据文件中有很多可用空间,但在查看文件大小/磁盘可用空间时不会注意到它。
如何监控数据文件的实际使用百分比?我更喜欢使用 perfmon 计数器。我担心当文件真的用完空间时,SQL Server 将无法分配足够的空间并且会崩溃。
除了重新安装软件之外,是否有一种简单的方法可以使用 SQL 实例“从头开始”?我的意思是:
我在网上找不到有关如何执行此操作的任何信息。
我只是想知道 SQL 语句INSERT INTO TABLE1 SELECT * FROM TABLE2,会像批量插入一样工作吗?
如果没有,有没有办法在插入记录时排除索引。进程在一次执行中插入 1.5 亿条数据。
我们计划创建阶段表(不会有任何索引Table1),然后将其从阶段表转移到目标表(会有索引Table2)
我们不是在从过程中创建平面文件的情况。
但是当我们将数据从Table1(未编入索引)传输到Table2(编入索引)时,我们正在寻找可以加快处理速度的方法。
任何方式使用BulkInsert自Table1到Table2?
我有管理大型分区 OLAP 表的特权。在查看此表时,我注意到其中一个索引与分区方案不一致。由于作者不在,并且精心设计的谷歌搜索没有返回任何有用的结果,我不确定这是有意还是无意。
是否有任何理由不对 SQL Server 2008 上的索引进行分区对齐?
使用 SQL Server 2008 到 2014 年,我知道如何在启用变更数据捕获 (CDC) 的情况下备份和恢复数据库,但我正在寻找一种查询完整备份文件以确定它是否包含 CDC 数据的方法。
像RESTORE FILELISTONLY这样从数据库中获取文件列表,而是获取 CDC 状态以确定还原是否需要使用 KEEP_CDC 标志的方法会很棒吗?
有没有办法确定备份是否包含 CDC 数据?
谢谢!
sql-server-2008 sql-server sql-server-2012 change-data-capture sql-server-2014
我们正在使用分区来减少由于锁定而阻塞我们 OLTP 系统体验的数量,分区方案根据客户 ID 将工作表拆分为 100 个分区。然而,我们在测试过程中发现执行计划的选择方式并不完全符合我们的预期。
测试场景是具有 300,000 条联系人记录的单个客户(每个联系人的数据分布在两个表中),所有记录都位于单个分区中,并通过查询在客户分区中查找 500 条特定行。您会期望像哈希匹配这样的东西来消除不需要的 299,500 以在计划的早期启动,但看起来 SQL Server 选择获取整个表的记录数并在考虑如何之前对所有分区进行平均它将处理许多记录,这导致它选择嵌套循环并在该过程的后期消除不需要的记录。通常,对于非分区表进行相同查询所需的时间是其 9 倍。
奇怪的是,向选择添加一个选项(重新编译)给出了一个明智的计划,但我不知道为什么这会有所作为。这不是存储过程,在测试期间,我们在每次测试运行之前清除过程缓存。
当所涉及的表未分区时,不会看到此行为,即每次选择适当的计划,因为估计的行数与实际数相匹配
对这种行为的任何见解将不胜感激。
架构设置:
USE [Scratch]
GO
CREATE SCHEMA part
GO
CREATE PARTITION FUNCTION [ContactPartition](smallint) AS RANGE LEFT FOR VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, …Run Code Online (Sandbox Code Playgroud) 给定一个 SourceTable 和一个 TargetTable,我想以编程方式创建一个需要所有连接的字符串。
简而言之,我试图找到一种方法来创建这样的字符串:
FROM SourceTable t
JOIN IntermediateTable t1 on t1.keycolumn = t.keycolumn
JOIN TargetTable t2 on t2.keycolumn = t1.keycolumn
Run Code Online (Sandbox Code Playgroud)
我有一个查询返回给定表的所有外键,但是在尝试递归运行所有这些以找到最佳连接路径并生成字符串时遇到了限制。
SELECT
p.name AS ParentTable
,pc.name AS ParentColumn
,r.name AS ChildTable
,rc.name AS ChildColumn
FROM sys.foreign_key_columns fk
JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id
JOIN sys.columns rc ON rc.object_id = fk.referenced_object_id AND rc.column_id = fk.referenced_column_id
JOIN sys.tables p ON p.object_id = fk.parent_object_id
JOIN sys.tables r ON r.object_id = fk.referenced_object_id
WHERE fk.parent_object_id = OBJECT_ID('aTable')
ORDER …Run Code Online (Sandbox Code Playgroud) 我每 15 分钟在 SQL Server 错误日志中收到此错误消息。我已经在这台服务器上设置了 AOAG。为该实例上的 Blackberry 相关数据库和 MSDB 数据库启用了数据库选项“Service Broker - Broker Enabled”。黑莓支持提到他们不需要启用此功能。我有其他 AOAG 实例,他们没有收到此错误。
请分享您在这方面的智慧。我还没有使用过服务代理,也没有在我的搜索中找到关于堆栈交换的类似帖子。
谢谢
sql-server service-broker sql-server-2012 availability-groups
我在 SQL Server 2008 中有一个一直在增长的数据库,我想知道哪些表在过去 6 个月中增长最快。
可以在表上设置数据压缩:
CREATE TABLE dbo.SomeTable(
SomeId [bigint] NOT NULL,
OtherId [bigint] NOT NULL,
IsActive [bit] NOT NULL,
CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED
(
SomeId Desc
)
) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE)
Run Code Online (Sandbox Code Playgroud)
它可以在主键上定义:
CREATE TABLE dbo.SomeTable(
SomeId [bigint] NOT NULL,
OtherId [bigint] NOT NULL,
IsActive [bit] NOT NULL,
CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED
(
SomeId Desc
) WITH (DATA_COMPRESSION=PAGE)
) ON SomePartitionScheme(SomeId)
Run Code Online (Sandbox Code Playgroud)
但是如果你把它放在两者上,你就会得到这个错误:
DATA_COMPRESSION 选项为表指定了多次,如果表已分区,则至少为其中一个分区指定。
把它放在PK上和放在桌子上有什么区别吗?
sql-server ×10
partitioning ×2
bulk-insert ×1
compression ×1
disk-space ×1
index ×1
insert ×1
monitoring ×1
perfmon ×1
recursive ×1
select ×1