我有一个包含两个表的数据库。一个表大约有 2000 万行,另一个表大约有 7000 万行。
当我在这两个表上运行 sp_spaceused 时,我发现数据的总大小为 ~6.7GB,索引的总大小为 ~2.6GB。加起来总共约 9.3GB。
这是该服务器上唯一的数据。
我是 SQL 新手,所以我假设在整个数据集和索引加载到内存后,这两个表将占用的 RAM 量接近 9.3GB。但我显然大错特错,因为在运行查询几分钟后,SQL Server 进程占用的内存将达到 30+GB 并继续攀升。我什至测试过一遍又一遍地运行相同的查询,并且占用的内存量继续攀升。
RAM 过多的原因是数据的最终大小将是此大小的 5-6 倍,这将用于数据分析。
我的问题是为什么 SQL Server 使用这么多内存?如果整个表和索引都加载到内存中,它继续加载到内存中的是什么?有什么办法可以控制这个吗?如果我的目标是内存分析,除了非聚集索引之外,还有其他类型的索引可以使用吗?我一直在阅读列存储索引,但在对较小的数据集进行测试后,与使用列存储索引相比,我实际上能够通过完全删除索引来获得更好的性能。
总的来说,我对这台服务器发生了什么感到困惑。任何人都可以提供一些指导吗?目前我正在尝试测试 SQL Server 2014,但它仍在 CPT2 中,因此在发布之前它不是解决方案。
我还研究了基于列的存储技术,例如 Amazon Redshift,但它们的服务不符合 HIPAA 标准。
在这个问题上,我发现了一些要运行的查询。我现在数据库的缓存大小是 32230.390625。这大于数据库总大小的 3 倍。
db_buffer_pages = 4125490
db_buffer_MB = 32230
Run Code Online (Sandbox Code Playgroud)
我还想做一些测试,并决定完全擦除数据库,重新启动 SQL 服务,并重新加载数据。当我这样做时,它使用了大约 20 GB 的 RAM。我不明白为什么。这是原始数据和索引大小的两倍多。
我有 SQL Server 工作。在作业的最后一步,我想停止/启动 SQL Server。
接下来,我创建了.bat文件NET STOP "MsSqlServer"
我尝试了使用执行进程任务的 SSIS 包,cmd.exe然后执行.bat文件以重新启动mssqlserver,它工作正常......
但是,当我在 SQL Server 作业中调用此包时,它会停止该服务,但不会重新启动它。
问题是如何在另一个 sql server 作业完成后停止/启动 sql server ..?
我在一个具有 64 GB 内存的工作站上有 sql 服务器/分析服务/报告服务。我每晚都有以下步骤:
有时,在步骤 2 中开始 AS 处理时,它会给我error: there is no resource Available and and the job got failed.
我想要的只是适合这种环境的良好内存配置。
我必须为内存管理选择什么策略?
另一个问题:在更新订阅的第 2 步之后(我有大约 50 个订阅),如果我尝试Update Subscription使用干净的内存(在我重新启动 SQL Server 服务后),订阅执行得非常快。
如果我不重新启动 SQL 服务,则需要很长时间才能运行,有时它永远不会给我结果。
这是我第一次将表添加到复制中。
我已经概述了将新表添加到现有复制的以下步骤。如果我错了,请纠正我。该表刚刚创建 - 没有数据。
exec sp_addarticle @publication = N'pub1', @article = N'tab1', @source_owner = N'dbo', @source_object = N'tab1'
EXEC sp_addsubscription
@publication = 'pub1',
@subscriber = 'sub1',
@destination_db = 'MLT-Rep'
GO
EXEC sp_addsubscription
@publication = 'pub1',
@subscriber = 'sub2',
@destination_db = 'MLT-Rep'
Run Code Online (Sandbox Code Playgroud)
在此之后,我应该运行 Snapshot 对吗?我该怎么做?只需导航到“本地发布”->“查看快照代理状态”-> 开始
以上步骤对吗?
使用 AO SQL 2012,是否可以将其中一个成员配置为延迟副本?我知道理想情况下我们希望同步它,但在人为错误的情况下,这将使我们能够检查辅助节点并从辅助节点恢复未提交的数据。在我们之前的一个设置中,我们使用了日志传送,其中还原到一个辅助服务器的时间延迟了一个小时。因此,在出现任何数据问题时,我们能够更快地恢复数据,而不是恢复整个数据库并恢复到时间点。任何输入表示赞赏...提前致谢
我们要求向某些人发送成功通知,而其他人则收到失败通知。

但是 UI 似乎只允许 1 个运算符 + 1 个条件的组合。
所以我想知道我们是否可以通过在 MSDB 中事务 sql 来完成?
我每天需要将 100 亿行导入数据库。
SSIS,似乎并没有削减它,我开始认为编写某种自定义 C/C++ 代码可能是一种尝试(我不太了解 C/C++)的选择。
我正在使用标准级别的制作盒,没有什么花哨但很体面。SQL 2012。
欢迎任何建议。
编辑:
源是一个平面文件。说 20 列。不确定尺寸。源数据在同一个磁盘上。(在这一刻)。
编辑 2:虽然列主要是 int/bigint,但有 5-7 个 VARCHAR(x)(最大的是 VARCHAR(1000))。
我发现 SSIS 的问题是读/写速度不是我所希望的。我尝试过 fastParse 等,以及其他各种技术。
除了技巧,我希望有技巧。小费显然仍然受欢迎。
我在 SQL Server 2012 中有一个简单的表,它实现了一个处理队列。随着数据的插入,检索下一个项目的查询从 <100 毫秒变为恒定的 5-6 秒。如果有人能指出性能突然下降的原因,我将不胜感激。(这似乎几乎是一夜之间的下跌)。
这是表定义:
CREATE TABLE [dbo].[messagequeue] (
[id] INT IDENTITY (1, 1) NOT NULL,
[testrunident] VARCHAR (255) NOT NULL,
[filesequence] INT NOT NULL,
[processed] BIT NOT NULL,
[dateentered] DATETIME NULL,
[filedata] VARBINARY (MAX) NULL,
[retries] INT NOT NULL,
[failed] BIT NOT NULL,
[msgobject] VARBINARY (MAX) NULL,
[errortext] VARCHAR (MAX) NULL,
[sourcefilename] VARCHAR (MAX) NULL,
[xmlsource] VARCHAR (MAX) NULL,
[messagetype] VARCHAR (255) NULL
);
CREATE NONCLUSTERED INDEX [messagequeue_sequenc_failed_idx]
ON [dbo].[messagequeue]([processed] ASC, [failed] ASC)
INCLUDE([id], …Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2012 queue query-performance
因此,如果我有一个带有值的表:
Name ID
---- ---
James 100
James 101
James 102
James 200
James 201
James 202
Alex 100
Alex 101
Alex 102
Alex 105
Alex 106
Alex 109
Alex 109
Alex 500
Alex 501
Alex 102
Run Code Online (Sandbox Code Playgroud)
我希望结果看起来像这样
Name ID
---- ---
James 100-102, 201-202
Alex 100-102, 105-106, 109, 500-502
Run Code Online (Sandbox Code Playgroud)
我知道,我可以使用 FOR XML PATH('') 连续转换数据。但我不确定如何用 - 替换连续数字。任何指导我走向正确方向的帮助将不胜感激。谢谢。
我移动了我的Model数据和日志文件:
ALTER DATABASE Model
MODIFY FILE (NAME = 'modeldev', FILENAME = 'D:\Data\model.mdf')
ALTER DATABASE Model
MODIFY FILE (NAME = 'modellog', FILENAME = 'L:\Log_Files\modellog.ldf')
Run Code Online (Sandbox Code Playgroud)
但它似乎失败了,现在我的 SQL Server 连接消失了,现在 SQL Server 似乎不起作用,我想知道我该如何纠正。
当我尝试连接到 SQL Server 时,消息是:
无法连接到 X。
与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)(.Net SqlClient 数据提供程序)。
我正在使用 SQL Server 2012。任何帮助将不胜感激。
谢谢。
我继承了一个带有 80 GB 日志的 10 GB 数据库 [根据 DBCC SQLPERF(logspace),仅使用了 3%]。假设日志的极端增长是由于我被聘用之前很久的问题似乎是安全的。
主节点有一个日志传送备份作业,每 15 分钟运行一次。主节点具有每 15 分钟运行一次的复制和还原作业。
当我尝试缩小日志时,我收到“无法缩小日志文件 2 (DatabaseName_log),因为位于文件末尾的逻辑日志文件正在使用中”。我已经间隔 15 分钟甚至几天重试了几次,但总是得到相同的结果。
DBCC LOGINFO 显示 784 个 VLF,只有前 245 个和最后一个 on,状态为 2。 p_WhoIsActive 显示最长的打开事务已运行不到 2 小时(由于第三方 Microsoft访问具有 ODBC 驱动程序问题的应用程序)。
如何成功缩小此日志(而不为用户造成中断)?
谢谢,马克
sql-server shrink sql-server-2012 transaction-log log-shipping
sql-server-2012 ×10
sql-server ×6
import ×1
log-shipping ×1
performance ×1
queue ×1
replication ×1
shrink ×1