AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-169536

WadeH's questions

Martin Hope
WadeH
Asked: 2020-04-24 11:21:46 +0800 CST

SQL STD 上最多 64 个可用性组:在使资源联机时尝试创建新的 NetBIOS 接口时失败

  • 1

今天早上我正在修补我们的数据库服务器,并在此处输入图像描述在故障转移某些可用性组时遇到了一个非常奇怪的错误:

在我们的环境中,我们正在运行一些非常规的设置,但它运行良好。我们有 85 个数据库,运行 SQL Server Standard,因此每个数据库都有自己的可用性组。我们默认做的是实际“负载平衡”两台服务器之间的可用性组。这意味着默认情况下,我们在每个节点上只有大约 42 个数据库,直到修补时我将所有数据库失败转移到一个节点,并且当我收到大约 24 个数据库的错误时。

在初步调查中,我发现每个资源只能有 64 个 NetBIOS 名称。可用性组不是他们自己的资源吗?在另一篇文章中,他们谈到确保您没有重复的 IP 或 DNS 名称。我可以确认我们没有任何重复。

是否有可能,在 SQL Standard 上,每个数据库只能有 64 个可用性组?

请帮助解决任何潜在的问题。非常感谢您的宝贵时间。

availability-groups sql-server-2016
  • 1 个回答
  • 45 Views
Martin Hope
WadeH
Asked: 2019-12-10 11:05:21 +0800 CST

在更新统计信息之前,查询执行计划很糟糕

  • 4

我希望你们能在这里帮助我。我们的应用程序每 3 秒轮询一次消息表以查找要发送的通知。这适用于我们所有的客户(单租户数据库),除了一个。他们一天 23 小时没有活动,然后一次加载数千条消息 (3000+)。在其他情况下,这个卷什么都不是,我们可以轻松处理它,除了在这种情况下,下面的 SQL 查询大约需要 30 秒才能运行,并且随着队列在更新时备份,需要排他锁和因此阻止所有其他查询,因此问题会导致各种破坏。这都是由于一个糟糕的查询计划。

我们每天早上 5 点运行每日重新索引(重组 < 30%,重建 > 30%,忽略 <5%)以及更新统计信息。这些都来自 Ola Hallengren 维护解决方案。我们也在 SQL Server 2016 上并且完全是最新的 (13.0.5492.2)

我手头没有这 2 个计划,但基本上糟糕的计划是对 MessagesSent 表(3.5m 行)进行全表扫描。

我的理论是,因为查询一整天都没有返回任何内容,某些部分没有执行,因此错误查询是 SQL 最有效的查询。

这将在刷新查询计划后继续,因为它只是生成相同的计划,但是当我在 MessagesSent 表上更新统计信息时,会创建好的计划并且一切正常,查询在大约 10-30 毫秒内执行。

有谁知道我如何微调它以始终使用更好的计划,即使查询返回的数据不存在?作为一个修补程序,我们在应用程序中添加了重新编译选项,但我认为这不是每 3 秒执行一次查询的理想解决方案。

这是查询:

WITH TopMessage
    AS
    (
        SELECT TOP 1 ID, BatchID FROM MessagesSent 
        JOIN Units ON Unit = idUnit 
        WHERE   MessageDate <= GETDATE() 
          AND         Active = 'True' 
          AND         Status = 'Queued' 
          AND NOT(DialString = 'null') 
          AND           Unit = ('29') 
          AND System in ('SystemName', 'Q1', '') 
        ORDER BY 
            CASE 
                WHEN QPriority IS NULL 
                    THEN 
                        CASE 
                            WHEN DefaultPriority IS NULL 
                                THEN 999999 
                                ELSE DefaultPriority 
                        END
                 ELSE QPriority 
            END ASC,
            Retries ASC, 
            MessageDate ASC, 
            ID ASC
    ),
    BatchCalls
    AS
    (
        SELECT * FROM MessagesSent 
        WHERE (
                 (LEN(BatchID) > 0 
                  AND BatchID = (SELECT TOP 1 BatchID FROM TopMessage)
                 ) 
        OR ID = (SELECT TOP 1 ID FROM TopMessage)
        )
        AND Status = 'Queued' AND Active = 'True'
    )

    UPDATE BatchCalls
    SET LastUpdated = @dtNow
    OUTPUT INSERTED.*
    WHERE Status = 'Queued'

非常感谢您的时间和寻找。

sql-server sql-server-2016
  • 2 个回答
  • 717 Views
Martin Hope
WadeH
Asked: 2019-07-23 10:17:11 +0800 CST

网络维护和高可用性组准备

  • 2

我们的一个交换机上的 RAID 卡死了,而替换的问题导致我的可用性组在我的 2 个节点之间多次故障转移,就像网球比赛一样,并使一些数据库处于不健康状态。

显然,该卡仍需要再次更换,并且我希望能够设置维护设置,以防止数据库重复进行故障转移,这将是一个短暂的瞬间。这将发生在这次活动低的时候,而不是活动高峰期。

是否有与此相关的最佳实践?什么是让数据库在大多数时间(除了临时)保持在线并且不让它们多次故障转移的最安全方法是什么?

我要关闭非活动节点吗?我要停止数据移动吗?

我们有 2 个运行 SQL 2016 Standard 的节点和 50 个可用性组。

任何提示或想法都会很棒。非常感谢

availability-groups sql-server-2016
  • 1 个回答
  • 49 Views
Martin Hope
WadeH
Asked: 2019-06-22 12:31:03 +0800 CST

来自链接服务器的故障转移可用性组

  • 1

我希望你们都可以帮助我解决一个非常简单的问题,但我正在努力寻找解决方案。

我们正在运行 SQL Server Standard 2016 并利用 2 个节点之间的可用性组。按照标准,每个可用性组只能有 1 个数据库。

每月一次,我们需要修补我们的服务器,手动故障转移每个组然后再回来修补是绝对痛苦的。我的解决方案是我有第三台服务器,它有节点 1 和 2 作为链接服务器,这有助于我管理 50 多个可用性组以及我们所做的其他一些与应用程序相关的事情。

我有一个到 2 个节点的连接,作为一项工作,我收集并更新服务器 3 上的一个表,其中包含 2 个主节点的每个数据库、可用性组名称、节点名称等。它每 5 分钟运行一次,并提醒我注意问题。

我的最后一步是现在在服务器 3 上拥有一个存储过程,这将允许我对可用性组进行故障转移,或者仅对一个等进行故障转移。它工作得很好,除了在一个节点上,在另一个节点上,我得到这个错误:

仅当您使用主数据库时才允许可用性组 DDL 操作。运行 USE MASTER 命令,然后重试可用性组 DDL 命令。

我的这个命令的代码如下:

SET @Query = 'EXEC (''ALTER AVAILABILITY GROUP [' + @CurrentAG + '] FAILOVER'') AT [' + @FailoverServer + '];'
        EXEC sp_executesql @Query

最终得到这个命令:

EXEC ('ALTER AVAILABILITY GROUP [MyAvailGroup] FAILOVER') AT [DestinationLinkedServerNode];

感谢您对此的任何帮助。

availability-groups sql-server-2016
  • 1 个回答
  • 290 Views
Martin Hope
WadeH
Asked: 2019-06-06 06:20:41 +0800 CST

SSAS表格模型日期维度与时间可能吗?

  • 2

我正在构建我的第一个 SSAS 表格模型,并认为一切进展顺利,直到尝试通过 DateTime 创建度量。

在我的仓库中,我有一个 DIm_Time 维度,它有一个 DateTime 列,过去 2 年每 5 分钟有一行。5 分钟是我们需要的粒度。另外,表上有一个 TimeID Identity 列。在我的 ETL 中,我根据每个事实表的 5 分钟范围为每个事实表分配一个时间 ID。所以最终结果是 ID 上的 2 个表之间的关系,假设每个 TimeID 有 10 个事实。

现在我正在尝试对每个时间范围的行数进行简单的计数。例如,当前小时有多少事实。我发现的问题是,在测试我的度量时,我在 PowerBI 或 Excel 中都没有看到任何数据,而且我 90% 确信这与我的模型在计算度量时将我的 DateTime 过滤为日期有关。

Fcts by Date:= 
CALCULATE ( COUNTA(Fct_Table[IDColumn]), Dim_Time[DateTime])

请有人帮我指出正确的方向,因为我正在努力寻找有关使用 DateTime 维度的任何内容。非常感谢。

我是,使用 SQL/SSAS 2017

ssas sql-server-2017
  • 1 个回答
  • 575 Views
Martin Hope
WadeH
Asked: 2019-05-23 13:03:41 +0800 CST

新数据仓库的 SSAS 表格模型或 SQL 关系数据库?SSAS仍然是学习技术的好方法吗?

  • 2

我正在为我的公司使用 SQL Server 创建数据仓库。我用一个简单的 SQL 关系数据库创建了一个 POC,其中有几个(大约 10 个)存储的用于 ETL 过程的 Procs。现在我已经获得业务支持,将其升级到生产状态,我将在该状态下将数据增加三倍,现在是确保我使用的技术最适合我们的需求并与一般最佳实践保持一致的正确时机。

我们每天将处理大约 50 万条记录,每天最多猜测大约 100 万条记录。然后,POC 将所有这些数据汇总为过去 4 年中每个客户每天 5 分钟的数据块。每个客户的每个事实(POC 有 4 个事实表)(让我们计划 25 个)总共有超过 50 万个时隙。因此,对于 POC,我们正在按客户和时间查看所有事实的大约 5000 万行。考虑到过去 6 个月满足所有问题的 85%,这意味着数据的最终视图很少,这意味着我们应该在 85% 的时间(如果不是更少)的时间里处理大约 250k 行的结果集。鉴于我希望将数据增加三倍,我们称之为最多 100 万行来满足 85% 的查询,分为大约 8 到 10 个具有大约 4 或 5 个维度表的事实表。

综上所述,如上所述,我处于一个非常幸运的位置,我现在可以选择用于仓库后端的技术。我从来没有真正有机会真正陷入 SSAS 并觉得它是我缺乏的一项技术。SSAS 是否仍然是数据仓库的热门选择,还是在过去几年中其受欢迎程度有所下降?它仍然像5年前一样使用吗?

简短版本:SSAS 是否仍然值得学习/投入时间和精力?

我们目前在 SQL 2016 上,这将在 SQL Server 2017 上构建

感谢您的所有意见。

sql-server sql-server-2016
  • 1 个回答
  • 796 Views
Martin Hope
WadeH
Asked: 2019-02-28 10:35:15 +0800 CST

慢速 While 循环,查询改进协助

  • 4

我正在创建一个数据仓库。我以 5 分钟的间隔创建了一个时间维度 (Dim_Time)。小时聚合将具有 [Minutes] = NULL。出于本示例的目的:

CREATE TABLE [dbo].[Dim_Time](
    [TimeID] [int] IDENTITY(1,1) NOT NULL,
    [StartDateTime] [datetime] NULL,
    [Hour] [int] NULL,
    [Minute] [int] NULL,
  CONSTRAINT [PK_Dim_Time] PRIMARY KEY CLUSTERED 
  ([TimeID] ASC)
  ) ON [PRIMARY]
GO

然后我有一个传入表,它每 5 分钟从 OLTP 数据库更新一次。

CREATE TABLE [dbo].[Stg_IncomingQueue](
    [IncomingID] [int] IDENTITY(1,1) NOT NULL,
    [CustomerID] [int] NOT NULL,
    [TimeID] [int] NULL,
    [InsertTime] [datetime] NULL,
 CONSTRAINT [PK_IncomingQueueMonitor] PRIMARY KEY CLUSTERED 
([IncomingID] ASC)
) ON [PRIMARY]
GO

然后我有以下 While 循环。其目的是获取与特定传入行相关的正确 5 分钟时间段 (TimeID):

WHILE 0 < (SELECT COUNT(*) FROM [dba_local].[dbo].[Stg_IncomingQueue] WHERE TimeID IS NULL)
BEGIN

    SELECT TOP 1 @IncomingID = IncomingID, @RowInserTime = InsertTime 
    FROM [dba_local].[dbo].[Stg_IncomingQueue] WHERE TimeID IS NULL


    ;WITH DimTime
    AS (
        SELECT MAX(TimeID) AS MaxTimeID FROM [dba_local].[dbo].[Dim_Time]
        WHERE StartDateTime < @RowInserTime AND [Minute] IS NOT NULL
    )
    UPDATE [dba_local].[dbo].[Stg_IncomingQueue]
    SET TimeID = (SELECT MaxTimeID FROM DimTime)
    WHERE IncomingID = @IncomingID

END

这是一个如此简单的过程,但我想不出更简单的方法来更新 TimeID。根据循环中的 CTE SELECT,我需要获取 MAX(TimeID),其中 StartDateTime 小于行 InsertTime。因为时间是唯一的关系,所以我在没有循环的情况下在 1 个查询中执行此操作的所有选项都在努力,但我觉得这是可能的

请有人可以通过更好的选择或确认这是最简单的方法来帮助我。

非常感谢您的时间和帮助。韦德

sql-server t-sql
  • 1 个回答
  • 273 Views
Martin Hope
WadeH
Asked: 2019-02-05 10:53:48 +0800 CST

对相当大的表 (2m) 上的错误查询的索引帮助

  • 8

我正在寻找一些帮助。我有一个针对相当大的表(200 万条记录)运行的查询。

我一直在努力让索引有效地工作。还有一些针对此表的其他查询,但这是迄今为止最常见的查询。我非常努力让它在 1 秒内执行,并且经常看到它在 3 到 5 秒内使用分析器运行。

它可能会尽可能快,但我希望能提供一些输入来确认/拒绝。

请注意:Dev 根本不会更改查询或模式。只能在数据库中进行优化,而不能更改模式。

桌子:

CREATE TABLE [dbo].[Notifications](
[ntID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[NotificationID] [int] NOT NULL,
[NotificationType] [nvarchar](50) NOT NULL,
[UserName] [nvarchar](50) NULL,
[CreatedBy] [nvarchar](50) NULL,
[CreatedOn] [datetime] NULL,
[Status] [nvarchar](50) NOT NULL,
[Result] [nvarchar](50) NULL,
[Extension] [nvarchar](50) NULL,
[ShiftRate] [nvarchar](255) NULL,
[ResponseMinutes] [int] NULL,
[ResponseWindow] [datetime] NULL,
[caNotificationID] [int] NULL,
[AwardedBy] [nvarchar](50) NULL,
[AwardedOn] [datetime] NULL,
[CancelledBy] [nvarchar](50) NULL,
[CancelledOn] [datetime] NULL,
[CancelledReasonID] [int] NULL,
[CancelledReasonText] [nvarchar](255) NULL,
[AwardingDate] [datetime] NULL,
[ScheduledLaunchDate] [datetime] NULL,
[CustomMessage] [nvarchar](160) NULL,
[SystemName] [nvarchar](4000) NULL,
[AutoClose] [bit] NOT NULL,
 CONSTRAINT [PK_ESP_Notifications_ntID] PRIMARY KEY CLUSTERED 
(
    [ntID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ESP_Notifications] ADD  DEFAULT ((0)) FOR [AutoClose]
GO

表数据快照:

示例数据的屏幕截图

查询:

Update Notifications 
  set Status = 'Awarding' OUTPUT deleted.* 
where ntID = (
    select top(1) ntID 
    from Notifications 
    where NotificationType = 'Shift' 
      and (Status = 'Done') 
      and ResponseWindow < '2019-02-04 10:40:03' 
    order by ntID)

尝试索引:

CREATE INDEX [IX_Notifications_Status_NotificationType_ResponseWindow_ntID] 
ON [dbo].[Notifications](
   [Status] ASC,[NotificationType] ASC,[ResponseWindow] DESC,[ntID] DESC
)

CREATE INDEX [IX_Notifications_Status_ScheduledLaunchDate_ntID] 
ON [dbo].[Notifications](
    [ScheduledLaunchDate] DESC,[Status] ASC,[ntID] ASC
)

CREATE INDEX [IX_Notifications_NotificationType_caNotificationID_NotificationID_ntID] 
ON [dbo].[Notifications](
   [NotificationType] DESC, [caNotificationID] DESC, [NotificationID] DESC, [ntID] DESC
);

NotificationType 包含 3 种不同的类型,其中 70% 是 'Shift' 类型 Status 有 10 种类型,但 'In Flight' 记录只有大约 100 到 200 条,分为 4 个 Status 的

谢谢您的帮助。

sql-server index
  • 1 个回答
  • 425 Views
Martin Hope
WadeH
Asked: 2019-02-02 06:07:46 +0800 CST

忽略存储过程中的空(可选)变量

  • 1

我正在寻找无需大量编码即可轻松实现的东西。

我有一个存储过程可以完成一些工作并且有大约 20 个可选参数:

CREATE PROCEDURE dowork 
                 @param1_1=NULL, 
                 @param1_2=NULL
                 .....@Param1_30=NULL

我正在实施另一个过程,它将调用那个过程,理想情况下,我想提供所有参数,但只使用已设置的参数:

CREATE PROCEDURE CallWork 
                 @param1=NULL, 
                 @param2=NULL
                 .....@Param30=NULL
AS BEGIN
--Do some stuff
EXEC dowork 
     @param1_1=@param1, 
     @param1_2=@param2
     .....@Param1_30=@Param30

上面的例子会按原样工作吗,或者我是否需要创建某种变量来保存所有“设置”参数?

参数是静态的。我以数字 1 到 30 为例,但它们都是静态的。示例:@StartTime、@EndTime、@Type等@Location。

当前 dowork,根据参数的输入处理批次。对于某些工作负载,我需要它一次处理一个批次,而不是同时处理所有批次。

通过创建一个抽象过程,我计划创建一个表变量来为每个批次保存一行,然后将它们一个接一个地传递,以便在某些情况下更好地控制我们需要的每个批次。然后,这将使原始过程像批量批处理作业所需的那样运行。

sql-server t-sql
  • 1 个回答
  • 617 Views
Martin Hope
WadeH
Asked: 2019-01-25 06:41:12 +0800 CST

可用性组终结点 Windows 身份验证错误

  • 4

我有一个双节点 SQL Server 2016 Standard Always-On 环境,当我创建一个新的可用性组时,我收到以下错误消息:

Endpoints 选项卡列出了至少一个仅使用 Windows 身份验证的端点。但是,服务器实例可能在非域帐户下运行。要使用列出的终结点,请将相应的 SQL Server 服务帐户更改为域帐户。要继续使用非域帐户,请更改端点以使用证书。

您要使用列出的端点吗?

现在有相当多的信息可以纠正这个问题,但我正在努力寻找适合我的场景的修复方法。如消息所示,所有我发现的是,当您以非域用户身份运行 SQL Server 和端点时。

我以同一域用户身份运行这两个实例,该用户在两个节点上都有管理员权限,在每个 SQL Server 实例中都有系统管理员权限,这可以在端点选项卡上看到,两个端点 SQL 服务帐户条目都是Domain\svc_account运行 SQL Server 的帐户条目。

可用性组创建完美,我偶尔会向辅助节点授予 CREATE DB 以初始化播种,但除此之外一切都很好。故障转移是完美的等等。我们有 20 多个 AG。这可能是个问题吗?我相信 AG 已在多达 100 个组中成功测试。作为 SQL Server Standard,我们每组只能做 1 个 DB,而且大多数 DB 都小于 5GB。

所以我假设它还没有引起任何问题,但无论如何我想知道在我的场景中它是否可以忽略或修复。

SSMS 窗口

节点 1 的输出:

节点1

节点 2:

节点2

谢谢你的帮助。

sql-server sql-server-2016
  • 1 个回答
  • 1267 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve