小编Aar*_*and的帖子

如何平衡 SQL Server 内存与 SQL Server Analysis Services 内存

我们有许多具有相同配置的系统

  • 一台服务器(虚拟或物理)
  • 运行 SQL Server (SQL) 和 SQL Server Analysis Server (AS)
  • 多核
  • 16GB 内存

每天晚上 SQL Server 会做大约 2-3 小时的处理,然后是 2-3 小时的 AS 处理。然后全天只查询 AS。

假设这是一个专用服务器,没有其他应用程序值得关注,并且两组处理是完全同步的 - 没有重叠总是一个接一个 - 我怎样才能最好地设置 SQL 和 AS 服务器内存限制。

询问的原因是,如果我不为 SQL 设置限制,它将抢占它所能获取的所有内存。但是 - 我的理解是,如果出现以下情况,SQL 将很乐意放弃此内存:

  • 它没有使用它并且

  • 另一个服务/程序请求它。

所以从逻辑的角度来看,我相信允许 SQL 根据需要使用尽可能多的东西,但我不太确定 AS' TotalMemoryLimit。我不确定 AS 是否会放弃它的记忆。事实上,阅读更多让我相信让它承担一切是错误的。

这是否意味着我实际上需要为两者设置限制?我对最佳实践应该是什么以及考虑到流程不重叠我们需要衡量什么感到困惑。

希望这是有道理的。

sql-server ssas memory

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

SQL Server 是如何生成加起来达到 6,000% 的查询执行计划的?

奇怪的执行计划

今天我在 The Heap 上,正在查看我认为可以改进的查询计划。然而,它创造了一些东西,动摇了我对 SQL Server 查询优化器的信念。如果甚至不能计数到 100%,我还可以信任它吗?

表的特点:

  • 聚集在非标识列上
  • 12 个索引,其中之一是相关date_entered
  • 60,000 条记录
  • 26列不同类型和长度
  • PAGE 压缩表

有没有人以前见过这个,是什么导致计划看起来如此扭曲?


以下来自 SQL Sentry Plan Explorer

SQL Sentry 计划资源管理器 - 图像 顶级运营

sql-server optimization ssms execution-plan sql-server-2012

11
推荐指数
1
解决办法
3153
查看次数

如何回答为什么突然需要更改索引或查询

我是初级 DBA,有 3 年的经验。我们的工作是微调查询或建议开发人员应该重写特定代码或需要索引。

开发团队经常问的一个简单问题是:“昨天运行良好,突然发生了什么变化?” 我们将被要求检查基础设施方面。对任何问题的第一反应似乎总是将最大的责任归咎于基础设施,这始终是首先要验证的事情。

我们应该如何回答开发团队提出的“改变了什么”的问题?大家有遇到过同样的情况吗?如果是这样,请分享您的经验。

performance sql-server execution-plan

11
推荐指数
3
解决办法
879
查看次数

未使用的索引最佳实践

基于此查询,如果我看到少量的总读取(非常接近 0 或 0,如 1 或 2)和大量或中等数量的用户更新(我无法通过此查询找到插入或删除)行数很大,理论上我应该删除索引。

SELECT DISTINCT
    OBJECT_NAME(s.[object_id]) AS ObjectName
       , p.rows TableRows
       , i.name AS [INDEX NAME]
       , (user_seeks + user_scans + user_lookups) AS TotalReads
       , user_updates UserUpdates
FROM sys.dm_db_index_usage_stats s
    INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] 
        AND i.index_id = s.index_id 
    INNER JOIN sys.partitions p ON p.object_id = i.object_id
WHERE OBJECTPROPERTY(s.[object_id],'IsUserTable') = 1
       AND s.database_id = DB_ID()
       AND i.name IS NOT NULL
ORDER BY (user_seeks + user_scans + user_lookups) ASC
Run Code Online (Sandbox Code Playgroud)

我想在这里交叉检查这个假设的准确性。例如,一个已经存在一年多但从未被阅读过但高度更新的索引,似乎是一个坏主意。是否存在这种假设无效的情况?

index sql-server best-practices index-tuning

11
推荐指数
1
解决办法
1054
查看次数

T SQL 表值函数以逗号分隔列

我在 Microsoft SQL Server 2008 中编写了一个表值函数,以在数据库中使用逗号分隔的列来为每个值吐出单独的行。

例如:“一、二、三、四”将返回一个只有一列包含以下值的新表:

one
two
three
four
Run Code Online (Sandbox Code Playgroud)

这段代码看起来容易出错吗?当我测试它时

SELECT * FROM utvf_Split('one,two,three,four',',') 
Run Code Online (Sandbox Code Playgroud)

它永远运行并且永远不会返回任何东西。这真的很令人沮丧,尤其是因为 MSSQL 服务器上没有内置的拆分函数(为什么为什么为什么?!)而且我在网上找到的所有类似函数都是绝对垃圾或根本与我想要做的事情无关.

这是函数:

USE *myDBname*
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR)

RETURNS @SplitValues TABLE
(
    Asset_ID VARCHAR(MAX) NOT NULL
)

AS
BEGIN
            DECLARE @FoundIndex INT
            DECLARE @ReturnValue VARCHAR(MAX)

            SET @FoundIndex = CHARINDEX(@delimiter, @String)

            WHILE (@FoundIndex <> 0)
            BEGIN
                  DECLARE @NextFoundIndex INT
                  SET @NextFoundIndex = CHARINDEX(@delimiter, @String, @FoundIndex+1)
                  SET @ReturnValue = SUBSTRING(@String, @FoundIndex,@NextFoundIndex-@FoundIndex)
                  SET …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql functions

10
推荐指数
3
解决办法
4万
查看次数

SQL 批量插入/BCP 导出后未释放已用内存

我创建了一个非常基本的 SQL 表,如下所示

CREATE TABLE [dbo].[TickData](
[Date] [varchar](12) NULL,
[Time] [varchar](12) NOT NULL,
[Symbol] [varchar](12) NOT NULL,
[Side] [varchar](2) NOT NULL,
[Depth] [varchar](2) NOT NULL,
[Quote] [varchar](12) NOT NULL,
[Size] [varchar](18) NOT NULL
    ) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

然后我执行了 3 Gig Bulk Insert

    BULK
    INSERT TickData
    FROM 
    'C:\SUMO.csv'
    GO
Run Code Online (Sandbox Code Playgroud)

然后 SQL 服务器的 RAM 使用量飙升,吃掉了大约 30Go 的 RAM:

在此处输入图片说明

在此处输入图片说明

我更愿意认为这是一种异常行为,可以采取措施来避免这种情况。

编辑:
好的,这似乎是默认行为。很公平。
但是,为什么在批量插入完成后很久没有释放内存

一些额外的考虑:
至于有关 SQL 服务器在操作系统“告知”时释放内存的评论,我在 24 核 32 Gb Xeon 服务器上的实践经验证明这是不准确的:一旦内存消耗大的 BCP 提取结束我有一个数据处理应用程序的 .Net 实例池,它们需要处理提取的数据,并且它们会窒息/争吵以共享剩余内存以尝试执行它们的工作,这比打开 SQL Server 需要更长的时间关闭,内存可供所有应用程序共享。我必须停止 …

sql-server memory

10
推荐指数
2
解决办法
5650
查看次数

Microsoft SQL Server 2008 R2 备份错误

我正在尝试对外部磁盘进行简单备份并收到此错误:

服务器“服务器名称”的备份失败

附加信息:

System.Data.SqlClient.SqlError:加载在“C:\Program Files\Microsoft SQL..”上的媒体被格式化为支持 1 个媒体系列,但根据备份设备规范需要 2 个媒体系列。(Microsoft.SqlServer.Smo)`

备份类型:完整

为什么我会收到此错误,为什么消息指向C:\Program Files..目标文件是外部设备?

sql-server backup

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

使用连接时,SQL Server 如何对结果进行排序?

SQL Server 如何计算查询执行结果集中记录的顺序?

我试图让它正面或反面,但发现自己挠头。当我更改字段时,我选择的顺序也会更改。当我用 a 执行下面的 SQL 时,SELECT *我得到相同的记录,但顺序大不相同。

 SELECT TOP (900)
    AD.ATTACHMENTID,
    AD.NAME,
    AD.ISINLINE,
    AD.INSERTEDDATETIME,
    ATMT.ATTACHMENTBLOB,
    U.UFID
  FROM ATTACHMENTDETAIL AD WITH (NOLOCK)
  INNER JOIN MESSAGEATTACHMENT MA ON MA.ATTACHMENTID = AD.ATTACHMENTID
  INNER JOIN ATTACHMENT ATMT ON ATMT.ATTACHMENTID = AD.ATTACHMENTID
  INNER JOIN MESSAGE MSG ON MSG.ID = MA.MESSAGEID
  INNER JOIN MESSAGEDETAIL MD ON MD.MESSAGEID = MA.MESSAGEID
  INNER JOIN [USER] U ON U.ID = MD.USERID
  LEFT OUTER JOIN XmlExtractionMapping XM ON MA.MESSAGEID = XM.MessageId
    WHERE AD.FILEBOXTOKEN IS NULL 
    AND (XM.XMLEXTRACTIONDATE …
Run Code Online (Sandbox Code Playgroud)

sql-server order-by

10
推荐指数
1
解决办法
3045
查看次数

我可以在装有 2008 R2 的机器上安装 SQL Server 2012 吗?

我使用 SQL Server 2008 R2 已经有一段时间了,它运行良好。现在我需要使用 SQL Server 2012。这会影响我现有的数据库吗?在运行 SQL Server 2008 R2 的计算机上安装 SQL Server 2012 涉及多少风险?

sql-server sql-server-2008-r2 installation sql-server-2012

10
推荐指数
2
解决办法
5万
查看次数

表创建时聚集索引创建失败

运行以下脚本时出现错误;

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
  WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='Table_Name')
BEGIN
CREATE TABLE Table_Name
(
    Field_Name_1 binary(32) NOT NULL CONSTRAINT PK_Name_Goes_Here PRIMARY KEY NONCLUSTERED
    , Field_Name_2 int NOT NULL 
    , Field_Name_3 datetime NOT NULL INDEX IX_Name_Goes_Here CLUSTERED
)
END 
Run Code Online (Sandbox Code Playgroud)

特别是它的聚集索引创建抛出以下错误:

消息 1018,级别 15,状态 1,第 15 行
“INDEX”附近的语法不正确。如果这是作为表提示的一部分,现在需要 WITH 关键字和括号。有关正确的语法,请参阅 SQL Server 联机丛书。

这很奇怪,因为它适用于我们所有的服务器,除了特定的 QA 服务器。我们采取的修复措施是在表创建语句之外创建聚集索引,但如果有人以前遇到过这个问题,我会感兴趣吗?

index sql-server clustered-index ddl sql-server-2012

10
推荐指数
1
解决办法
2294
查看次数