标签: sql-server-2014

Totals(sums/counts) 跨多个子表查询优化

我们的数据库中有 12 种类型的费用,其中一些有相当不同的数据减去金额字段。我们在应用程序和报告中有多个地方需要单个和多个费用总计以及每个费用类型和总计的计数。最后,我们希望所有这些调用都有一个视图,但可以使用存储过程。

我们为此查看了多种替代方案,发现 CTE 允许我们在不使用临时表的情况下获取所需的所有数据。使用连接不起作用,因为无论我们尝试什么,我们都看到记录被复制或删除。

我附上了费用表的一个子集和包含 CTE 的查询。有没有人有比这更好的选择?更快的东西?我们是否适当地接近这种“扁平化”?

请注意,无论是 View 还是 Proc,此查询的执行计划都是相同的,并且 Proc 的运行时间似乎是原来的两倍。

下面是代码

WITH pe AS
(
SELECT 
    EventRegistrationId
    ,sum(AmountPaid)            as AmountPaidTotal
    ,sum(CommercialValueAmount) as CommercialValueAmountTotal
    ,count(1) as ExpenseCount
FROM PettyExpenses 
WHERE IsDisputed = 0 AND IsUndisputed = 0
group by EventRegistrationId
),hpe AS
(
SELECT 
    EventRegistrationId
    ,sum(AmountPaid)            as AmountPaidTotal
    ,sum(CommercialValueAmount) as CommercialValueAmountTotal
    ,count(1) as ExpenseCount
FROM HirePremisesExpenses 
WHERE IsDisputed = 0 AND IsUndisputed = 0
group by EventRegistrationId
), ae AS
(
SELECT 
    EventRegistrationId
    ,sum(AmountPaid)            as AmountPaidTotal …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

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

查询在 SQL Server 2014 中很慢,在 SQL Server 2012 中很快

在将我们的一个数据库从 SQL Server 2012 (SP1, CU2) 迁移到 SQL Server 2014 (SP1) 的过程中,我们遇到了一些奇怪的问题。

在 SQL Server 2012 上几秒钟内完成的查询之一似乎挂在 SQL Server 2014 上。

SELECT  DISTINCT 
    src.[Id]
FROM
    [stg].[BaseVolumes] src
JOIN     
    [tmp].[Dates] d ON src.[CalWeek_Nmbr] = d.[CalYrWkDense_Nmbr]
WHERE   
    EXISTS (SELECT  *
            FROM    
                (SELECT     ctry.[ISOCode]                  AS  [Mkt_Code]
                            , so.[Code]                     AS  [SlsOrg_Code_AK]
                            , so.[DistributionChannelCode]  AS  [DistChnl_Code_AK]
                            , prd.[SupplierCode]                AS  [SKU_Code_AK]
                            , cl6.[Code]                        AS  [CstHierLvl06_Code_AK]
                            , lp.[BaseDateID]                   AS  [Dte_EK]
                 FROM   [PM_APP].[edw].[BaseVolumeDayCurrent]   lp
                 JOIN   [PM_APP].[dbo].[Country]                ctry    ON  lp.[CountryID] = ctry.[ID]
                 JOIN   [PM_APP].[dbo].[SalesOrganisation]      so      ON  lp.[SalesOrganisationID] = so.[ID] …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan sql-server-2014 query-performance

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

SSAS - 什么是内存设置的好起点?

我收到了以下有关 SSAS 内存设置的警报:

警报:
SSAS 2014:无效的 TotalMemoryLimit 配置来源:
MSSQLSERVER 路径:SASBI01
警报时间:9/15/2015 5:38:50 PM

告警描述:
为SSAS实例配置的TotalMemoryLimit(307.1728515625 GB)超过了操作系统必要功能所需的配置阈值,可能导致系统不稳定或故障。

服务器上的总内存: 0 GB 总内存
使用量:0 GB 非 SSAS
进程
使用的内存:-3.89069747924805 GB SSAS 使用的
内存:3.89069747924805 GB SSAS内存限制下限:249.57795715332 GB (0%)
S3725 GB1 上限上限(0%)

SSAS 中这些内存设置的一个好的起点是什么?请看下图。

该服务器仅运行 SSAS。

sql-server ssas memory configuration sql-server-2014

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

运行带有多个命令的脚本时,如何找出我们所处的位置?

我有一些流程需要在开始之前采取不同的步骤。例如:

禁用对外键的检查约束:

select 'alter table '+fk.table_schema+'.'+fk.table_name
+' NOCHECK CONSTRAINT '+fk.CONSTRAINT_NAME 
from SAProduct.information_schema.table_constraints fk 
join SAProduct.information_schema.tables t
on t.table_schema = fk.table_schema 
and t.table_name = fk.table_name 
WHERE constraint_type='FOREIGN KEY'
Run Code Online (Sandbox Code Playgroud)

这将产生一个很大的语句列表,我只复制 3 个:

use saproduct
go
alter table dbo.tblProdClassificationCode NOCHECK CONSTRAINT FK_tblProdClassificationCode_tblProdClassification
alter table dbo.tblProdClassificationCodeDescr NOCHECK CONSTRAINT fk_ProdClassificationCodeDescr_ProdClassificationCode
alter table dbo.tblProdClassificationCodeGenerate NOCHECK CONSTRAINT fk_ProdClassificationCodeGenerate_ProdClassification
Run Code Online (Sandbox Code Playgroud)

如果我要一次性运行它,我将如何找到我的位置?我正在处理哪张桌子,下一张是哪一张?

删除也是一样的:

select 'DELETE FROM '+table_schema+'.'+table_name
from saproduct.information_schema.tables 
where table_name like 'tbl%'
Run Code Online (Sandbox Code Playgroud)

上面的脚本将生成以下语句集:

use saproduct
go
DELETE FROM dbo.tblBLanguage
DELETE FROM dbo.tblBLgCategoryXRef
DELETE FROM dbo.tblBLgSegmentXRef
DELETE FROM dbo.tblProdClassification
DELETE …
Run Code Online (Sandbox Code Playgroud)

monitoring sql-server ssms t-sql sql-server-2014

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

即时同步多个 SQL 服务器

首先,如果这是重复的,我很抱歉。我找不到解决这个特定问题的人,或者我在阅读时可能没有意识到这一点。很可能我使用了错误的搜索短语,因为我对术语并不十分熟悉。

我们有3台服务器:

一个。SQL服务器

。警报系统

Ç。网站+API+其他

服务器BC必须一直连接到服务器A,并且出现了几次宕机的情况,导致了很多客户的不满。


我们想要以下内容:(不同的字母使评论更容易,尽管可能不是 :p )

w ^。报警系统(带 SQL 服务器)

。网站 + API(带 SQL 服务器)

网站+ API(带 SQL 服务器)

Z。其他(使用 SQL 服务器)

编辑: XY在技​​术上是相同的,但X通常会托管网站,而我们的应用程序和 3rd 方解决方案通常会连接到服务器Y上的 API ,以确保仅通过一个渠道感觉到故障。如果X崩溃,那么Y将同时为网站和 API 提供服务,直到X重新上线,反之亦然。

同步 SQL 服务器至关重要。如果客户端通过网站(服务器X)对数据库进行更改,然后激活警报系统W(更改很重要),那么它必须已经同步。

每个系统只使用部分数据库和表,为了节省资源,我们只能立即同步重要数据,每隔几个小时左右就可以同步其余数据。 编辑:不是一个选项


我们将在所有服务器上使用SQL Server 2014(除非有人说服我)

  • 我们是否需要任何 …

sql-server data-synchronization sql-server-2014

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

SQL Server 2012/2014 Standard 是否支持 Hyper-V 来宾上的热添加内存?

在这篇支持文章中:

https://support.microsoft.com/en-us/kb/956893

Q7的答案说:

SQL Server 完全支持 Hyper-V 动态内存。只有支持热添加内存(企业和数据中心)的 SQL Server 版本和版本才能看到使用 Hyper-V 动态内存添加的内存。SQL Server 2012 标准版在虚拟环境中运行时也能识别热添加内存

这两句话似乎是矛盾的。谁能确认 SQL Server Standard在 Hyper-V 来宾上运行时是否支持热添加内存?

sql-server sql-server-2012 sql-server-2014

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

切换到简单恢复 - 缩小事务日志

标准免责声明:我是一个“非自愿DBA”(在一个不错的那句我看到这篇文章),也做了很多很多大量的大量的大量的阅读关于这个问题,但我仍然困惑/关注...

我需要将几个 SQL Server 2014 生产数据库的恢复模型从完整更改为简单。

数据库目前设置为完全恢复,并且正在使用SqlBackupAndFTP进行备份,这将每天进行一次完整备份,每天进行 3 个差异备份和 20 个事务备份。这一直运行良好,直到我们与提供基于 FTP 的存储的公司发生了巨大的问题。

大约 3 个月前,我改用运行良好的Attix5 - 但是,我现在发现由于软件的工作方式,事务日志与数据文件一样大(在一种情况下,对于 13Gb 数据文件超过 14Gb )。

我被建议将恢复模式切换为简单,这样事务日志就不会增长。

我知道使用 Simple Recovery 不会提供时间点恢复- 这绝对没问题,因为完整备份每小时进行一次,我们“很高兴丢失”之前 1-59 分钟内可能发生的任何事情。

我的理解是我应该将恢复模式设置为简单并让备份发生,这将在事务日志中设置一个检查点,允许重新使用空间。

但是,我确实需要将事务日志缩小到合理的大小(这样它就不会占用太多的备份空间),但我一直在读到缩小是一个坏主意。还是我拿错了棍子的一端?

如果我使用以下命令将事务日志缩小到大约 25Mb(对于单个每小时的事务集来说应该足够大),这是否足够?

DBCC SHRINKFILE('log file name',25)
Run Code Online (Sandbox Code Playgroud)

(我真的很抱歉问一些之前似乎被问过无数次的问题,但这不是我可以出错的。)

sql-server shrink transaction-log sql-server-2014 recovery-model

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

SQL Server 2014 Always On .. 我可以在没有侦听器的情况下进行复制吗?

我仍然是 SQL Server Always On 的新手,最近从独立服务器转换为永远在线配置。我目前在我的可用性组中配置的同一子网上有两个节点,效果很好。

当我尝试将第三个节点配置到可用性组中时,问题就出现了。这第三个节点跨 WAN 位于一个完全不同的子网中。当我尝试将第三个节点添加到组中时,在“将辅助副本加入可用性组“agname”的步骤中出现错误。单击错误的详细信息

为可用性组侦听器配置的任何 IP 地址都不能由服务器 <新服务器名称> 托管。配置一个可以托管指定 IP 地址之一的公共集群网络,或者为此服务器添加另一个可以托管在公共集群网络上的侦听器 IP 地址

因此,我尝试添加另一个侦听器地址,但查看已配置侦听器的属性并没有提供添加另一个地址的选项。尝试添加第二个侦听器会引发错误,表明已配置侦听器。

稍等片刻,我不需要第三个节点成为故障转移候选节点。我希望它是只读副本。是否可以在其子网中没有侦听器的情况下将其添加到复制中?

是否有另一种方法可以在该子网中添加具有DHCP地址的第二个侦听器,以便我可以完成向导?到目前为止,在线搜索仅通过在故障转移集群配置本身中创建额外的客户端访问点来显示解决方法,这是我不确定我想要采用的路线。

sql-server availability-groups sql-server-2014

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

“分离数据库”对话框中的“删除连接”和“更新统计信息”有什么作用?

作为测试阶段,我安装了 SQL Server 2014 企业版的评估版。

当我通过 SQL Server Management Studio 分离数据库时,我看到两个选项:

  1. 断开连接
  2. 更新统计

在此处输入图片说明

这两个选项都将从 SQL Server 实例中分离数据库。这两个选项有什么区别?

sql-server sql-server-2014

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

在服务器上查找重复的大量 SQL 编辑的来源

我会尽量清楚地解释我的问题。

我支持的一家公司的服务器运行着许多网站。此服务器运行带有 Microsoft SQL Server 2014 的 Windows Server 2012。

几乎所有网站都在运行由同一家公司制造的专有 Web 应用程序。

只有部分网站会受到(几乎)每个 TEXT、NTEXT 和 NVARCHAR(MAX) 字段在其各自数据库中的定期批量编辑的影响。

带有恶意或垃圾邮件链接的 HTML 被添加到表的每条记录中,仅在具有上述指定类型的字段中。

服务器已经用几个工具扫描过,所有的主密码(管理员,SQL Server 的 sa)都已更改。我还尝试运行 SQL Profiler 来尝试识别批量更新查询,但没有成功。

我现在可以想象,这可能是 SQL 注入攻击,它利用运行这些网站的软件中的漏洞,但为什么只有其中一些?其他具有相同版本的网站从未出现此问题。

如您所知,还有什么我可以尝试的吗,或者我错过了什么?如果您可能需要其他数据,请毫无问题地回复。

security sql-server sql-injection sql-server-2014

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