小编pap*_*zzo的帖子

SQL Server 未使用可用内存

Windows 2008R2 Enterprise 上的 SQL Server 2008 R2 标准版(64 位)

  • 服务器有超过 300 GB 的内存,但控制面板中的总内存使用量从未超过 86 GB
  • 将 SQL 配置为使用最大内存量
  • 即使在大量使用情况下 - CPU 超过 80% 数分钟

  • 专用 SQL Server

  • 几个大型数据库
  • 一个频繁使用的表的索引大小超过 10 GB

将服务帐户设置为在内存中锁定

这是正常的吗?

我可以测试什么?

我可以让 SQL Server 使用更多内存吗?

sql-server memory sql-server-2008-r2 hardware

8
推荐指数
1
解决办法
1017
查看次数

SQL Server INNER REMOTE JOIN 返回的行数比 INNER JOIN 多

我正在尝试将远程视图中的几行加入本地表。该视图有大约 3 亿行,所以我想使用 REMOTE 查询提示,以便不必将所有 300 万行传输到我的计算机。

SELECT R.Something, L.ID, L.Something
FROM [dbo].[LocalTable] L
INNER JOIN (
    SELECT TOP 100 Something, L_ID FROM [RemoteServer].[RemoteDB].[dbo].[RemoteTable]
    ) R
ON L.ID = R.L_ID
Run Code Online (Sandbox Code Playgroud)

正如我所料,这将返回 100 行,并且基本上不需要时间,正如我所料。

然而,

SELECT R.Something, L.ID, L.Something
FROM [dbo].[LocalTable] L
INNER REMOTE JOIN (
    SELECT TOP 100 Something, L_ID FROM [RemoteServer].[RemoteDB].[dbo].[RemoteTable]
    ) R
ON L.ID = R.L_ID
Run Code Online (Sandbox Code Playgroud)

开始返回数千行。几秒钟后我退出了它,但它是数万 - 数十万。

查询提示如何更改我的结果集?

sql-server hints sql-server-2008-r2

7
推荐指数
2
解决办法
1408
查看次数

SQL 查询问题(列中没有值的项目)

这是我需要用一些 T-SQL Magic 解决的难题,我尝试过但失败了。

这是其中之一,在我想到实际解决方案之前,我认为我可以在 3 分钟内使用一些 T-SQL 解决,但是当“橡胶遇到道路”时,我无法在脑海中想象正确的运算符来实现这个逻辑。

我想知道 Stack Exchange 社区中是否有人可以找到一个优雅的解决方案。我想通过使用临时表或游标的 3 或 4 个查询的组合,我可以找到解决方案,但它不会基于 SET...

我有一张看起来像这样的桌子(或多或少......)

CREATE TABLE Computers (
   ID               int IDENTITY(1,1),
   ComputerName     varchar(255),
   OS               varchar(255),
   AppName          varchar(255),
   AppVersion       varchar(10)
)
Run Code Online (Sandbox Code Playgroud)

因此,每一行都有一个计算机名称、一个操作系统值(可以是 Windows 7 或 Windows 10),然后是应用程序的描述(例如 AppName = "Notepad++", AppVersion = "7.5.6")

ComputerName   | OS           | AppName   | AppVersion
Computer 1     | Windows 7    | App 1     | 1.0
Computer 1     | Windows 7    | App 2     | 1.0
Computer 1     | Windows 7    | …
Run Code Online (Sandbox Code Playgroud)

t-sql select

6
推荐指数
1
解决办法
79
查看次数

将表提示 INDEX 和 FORCESEEK 与两个不在 PK 上的连接相结合

请参阅下面的第一个查询。
不能将表提示索引和 forceseek 与两个连接组合在一起,并且连接不在 PK 上。
如何使第一个查询编译?

有趣
- 如果只有一个连接或另一个可以组合索引和 forceseek 提示
- 如果索引是 PK 那么可以组合 2 个连接并有两个提示

-- compiler fails 
-- Query processor could not produce a query plan because of the hints defined in this query. Resubmit the query without specifying any hints and without using SET FORCEPLAN.  
Select Count(Distinct([docSVsys].[sID])) 
From [docSVsys] with (nolock) 
Left Join [docSVtext] with (nolock, Index(IX_docSVtext_value_sID), forceseek ) 
       On [docSVtext].[sID] = [docSVsys].[sID]
Left Join [docMVtext] with (nolock, Index(ix_docMVtext_value_sID), forceseek) 
       On [docMVtext].[sID] = [docSVsys].[sID]
where …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server hints

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

计算订单之间的平均天数

我想从一个名为 Orders 的表中计算几个订单日期之间的平均天数。对于每个 CustomerID,订单之间的平均天数是多少。示例表如下(img):

CREATE TABLE #Orders(CustomerID int, OrderDate datetime);

INSERT #Orders(CustomerID, OrderDate) VALUES
    (100,'20170114'),(100,'20170123'),(100,'20170129'),
    (101,'20170202'),(101,'20170212');
Run Code Online (Sandbox Code Playgroud)

我试过这个查询:

SELECT  CustomerID, AVG(OrderDate - PriorDate)
FROM (SELECT CustomerID, OrderDate
           , LAG(OrderDate) OVER (PARTITION BY CustomerID ORDER BY OrderDate) as PriorDate
      FROM #Orders where CustomerID = 100)
Run Code Online (Sandbox Code Playgroud)

但是,这会产生:

消息 102,级别 15,状态 1
')' 附近的语法不正确。

sql-server t-sql sql-server-2014

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

INT IDENTITY 列上的 PK 分片

有简单的Int Identity我PK。

表有 220 万行。

删除了零行,从未禁用身份。

一次通过 .NET 插入一行,每次插入都检索SCOPE_IDENTITY().

20 与它的一些 FK 关系。

我有 98% 的碎片。

知道是什么原因造成的吗?

我知道修复是重建,今晚会这样做。

我想知道如何避免它。

自从填充以来,我已经添加了 3 列。
一些列几乎修改了每个值。
属性的长度没有太大变化。

表定义

/****** Object:  Table [dbo].[docSVsys]    Script Date: 02/13/2013 15:52:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[docSVsys](
    [sID] [int] IDENTITY(1,1) NOT NULL,
    [sParID] [int] NULL,
    [docID] [varchar](100) NOT NULL,
    [attBeg] [varchar](100) NULL,
    [attEnd] [varchar](100) NULL,
    [docDate] [smalldatetime] NULL,
    [addDate] [smalldatetime] NOT NULL,
    [mimeType] [varchar](40) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

组合(连接)没有键的表

我有表 B 和表 A。表 B 包含我需要提取的日期记录。但是,我只想在以下情况下拉动它们:

  • 它们在表 A 中根本不存在
  • 它们存在于表 A 中,但仅当表 A.status = 0 时

诀窍是我没有钥匙可以加入表格。所以,我使用 Item 列和 date 列来加入。(注意两个项目可以有相同的日期。也可以有多个相同的项目,但日期也不同。)

所以表 B 可能有:

    [Item]      [Qty]   [Date]
    F-001100,   400      7/14/2016
    F-002200,   750      7/28/2016
    F-000767,   1000     7/28/2016
    F-006006,   300      8/01/2016
    F-002200,   900      7/30/2016
Run Code Online (Sandbox Code Playgroud)

表A可能有:

[Item]    [Status]  [Qty]    [Date0]     [Date2]     [Date3]     [Date4]
F-001100, 1,        400      7/14/2016   7/15/2016   7/16/2016   7/17/2016
F-002200, 0,        750      7/28/2016   7/29/2016   7/30/2016   7/31/2016
Run Code Online (Sandbox Code Playgroud)

所以结果集应该是:

[Item]       [Qty]     [Date]
F-002200,    750       7/28/2016
F-000767,    1000      7/28/2016
F-006006,    300       8/01/2016
F-002200,    900       7/30/2016 …
Run Code Online (Sandbox Code Playgroud)

t-sql

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

如何使用 CASE 语句返回多于 1 个值

我需要用CASE生成WHERE IN ()语句,我试试这个:

SELECT * FROM table 
WHERE tbl_column IN ( CASE
                      WHEN @val = 1 THEN (SELECT * FROM (VALUES (2), (22)) AS X(a)
                      WHEN @val = 5 THEN (SELECT * FROM (VALUES (13), (18), (44)) AS X(a)
                      WHEN @val = 7 THEN (SELECT * FROM (VALUES (7)) AS X(a)
                      END
                    )
Run Code Online (Sandbox Code Playgroud)

但我收到错误:子查询返回了 1 个以上的值。

我应该怎么做?

t-sql

-2
推荐指数
1
解决办法
2976
查看次数