标签: sql-server-2012

数据仓库索引

我有一张有近 600 万条记录的表。标识唯一行的业务键非常大。自从我为新多维数据集添加了这个新表以来,我们的更新处理现在需要更长的时间。我目前在更新的连接列上没有索引。SQL Server 估计执行计划说我应该在业务键上创建这个索引:

/*
Missing Index Details from Server.db
The Query Processor estimates that implementing the following index
could improve the query cost by 86.9178%.
*/

/*
USE [db]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [schema].[Production] 
(
    [ProdId],[PriceCalc],[CalcTypeId],[OprId],[CostGroupId],[Resource],
    [BOM],[ResourceDepartment],[OprNum],[DateWIP],[DataAreaId],[Partition]
)
INCLUDE 
(
    [ProdOrderStatus],[ManufacturedItemId],[CalcType],[CalculationLevel],
    [CostAnalysisOrderType],[CostGrouping],[UnitId],[WorkCenter],[Name],
    [RealisedConsumption],[RealisedCostAmount],[RealisedCostAdjustment],
    [EstimatedConsumption],[EstimatedCostAmount],[LotSizeVariance],
    [StandardQty],[StandardCost],[ItemStandardQty],[HasSubstitutionVariance],
    [R2],[R3],[StandardQtyByRAFQty],[StandardCostByRAFQty],[ProductionOrderType],
    [RealisedAllocation],[CostVariance],[QuantityVariance],[SubstitutionVariance],
    [TotalVariance],[ComponentItemId],[InventoryUOM],[InventConsumptionTransUOM],
    [BomConsumptionTranUOM],[TransactionUOM],[TransUOMToInvUOMConversionRate],
    [InventConsumptionInvUOM],[BomConsumptionInvUOM],[TotalNetWeightPerUnitInvUOM],
    [InventoryNetWeightUOM],[ReportingNetWeightUOM],
    [NetWeight_InvUOMToReportingUOMConversionRate],
    [InventConsumptionTotalNetWeightInvUOM],[BomConsumptionTotalNetWeightInvUOM],
    [InventConsumptionTotalNetWeightReportingUOM],
    [BomConsumptionTotalNetWeightReportingUOM],
    [FinancialProductId],[FinancialDepartmentId],[FinancialMarketId],[FinancialCodeId],
    [FinancialTypeId],[FinancialSiteId],[ProdPoolId],[Company_SK],[ComponentItem_SK],
    [EndedDate_SK],[DateWIP_SK],[FinancialCode_SK],[FinancialDepartment_SK],
    [FinancialMarket_SK],[FinancialProduct_SK],[FinancialSite_SK],[FinancialType_SK],
    [InventoryNetWeightUOM_SK],[InventoryUOM_SK],[ManufacturedItem_SK],
    [ProductionOrder_SK],
    [ReportingNetWeightUOM_SK],[TransactionUOM_SK],[BatchRunId],[ValidInd],[ScrapVar],
    [QuantityPO],[ExpectedConsumption],[FibreScrapFactor],[QtyAndSubVariance],
    [EndedDate],[RealisedAllocationCost],[FilmScrapFactor])
GO
*/
Run Code Online (Sandbox Code Playgroud)

它想在键列上创建一个索引,但是它想包含许多列。我应该听它还是只包含关键列?谢谢你的帮助。这是一个生产问题,所以我不能去测试不同的东西等。

我们正在考虑采用散列解决方案,如下所示:

使用 Hashbytes 跟踪和存储 SQL …

sql-server index-tuning sql-server-2012

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

如何在托管数据库和本地数据库之间复制数据

我有一个由不同公司维护的云托管数据库。这是我的场景:

  • 云托管数据库 SQL Server 2012 - 需要通过 VPN 连接。
  • 我们设置了一个带有双网卡的本地服务器。这允许我们拥有 VPN 连接和本地网络连接。
  • 我想在我们的服务器上有一个云托管数据库的本地副本。
  • 我无法在 SQL 服务器内设置复制,我没有云服务器的权限。
  • 我无法备份和恢复数据库 - 我没有云服务器的权限。
  • 我不能使用触发器
  • 我不能使用日志。
  • 我不能使用备份

如何关闭整个数据库、模式和数据,并保持我的本地数据库实时更新?

编辑:我能够从托管公司运行脚本,因此我可以创建数据库以及架构和初始数据。

最重要的问题是如何让数据保持实时同步?现在,我正在考虑在 SQL 中执行一系列作业来查询链接服务器数据库,如下所示:

insert into local_table_1
select * from linkedserver_table1
except
select * from local_table_1
Run Code Online (Sandbox Code Playgroud)

问题是,它效率不高,并且不会提取任何更新的记录。我们确实有一个“Updated_date”字段。如何更新本地服务器,从链接服务器中选择所有记录,并更新本地数据库?

sql-server linked-server sql-server-2012

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

令人困惑的查询:混合聚合和非聚合

希望有人能澄清如何从 SQL Server 2012 中执行此查询,或者它可能在问什么;似乎我被要求做一个将聚合与非聚合相结合的查询,这导致了一个看似不可能的查询,因为一个人只能按出现在Select子句中的字段进行分组,这会使查询变得混乱。

我被要求对表进行查询Invoices

Invoices (InvoiceID, VendorID,InvoiceDate, InvoiceTotal,...)
Run Code Online (Sandbox Code Playgroud)

我被要求执行一个生成 6 列的查询:3 列已经“按原样”出现在表中: VendorID, InvoiceDate, InvoiceTotal

其他 3 列是聚合:

4) Sum(InvoiceTotal) AS VendorTotal: 每个发票的总和VendorID

5) Count(InvoiceID) AS VendorCount: 每个发票的数量VendorId

6) Avg(InvoiceTotal) AS VendorAvg: 平均每张发票VendorId


现在,问题是不能在同一个查询中组合(除了我不能在这里使用的例外)聚合和非聚合,除非按非聚合分组。所以我可以这样做:

Select 
    VendorId, InvoiceDate, InvoiceTotal, 
    Sum(InvoiceTotal) AS VendorTotal, 
    Count(InvoiceId) AS VendorCount, 
    Avg(InvoiceTotal) AS VendorAvg 
GROUP BY
    VendorID 
Run Code Online (Sandbox Code Playgroud)

现在,如果我只是group by VendorID. 但是为了获得有效的查询,如果我选择其中一个InvoiceDateInvoiceTotal——两个非聚合——我必须按它们中的每一个分组以获得有效的查询。

但是按这最后两个分组基本上会撤消其他聚合:如果我按发票日期分组,我将丢失按供应商的聚合,因为每个供应商都有不同的发票日期。

我尝试过进行自联接,在 中使用Invoices AS I1 join Invoices …

sql-server sql-server-2012

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

文件流列的统计信息

当我尝试在文件流列上创建统计信息时,我收到以下错误消息:

表 'MyTable' 中的列 'MyColumn' 的类型不能用作索引或统计信息中的键列。

这记录在CREATE STATISTICS的 BOL 页面中,这不是问题。

但是,当我在列(IS NOT NULL, 为记录)上运行带有谓词的查询时,会自动创建统计信息。为什么手动创建不允许这样做,但自动创建仍然可以?

我想手动创建统计数据的原因是我想标记它NORECOMPUTE以避免扫描几GB的数据。我知道我可以让 SQL Server 自动创建它然后NORECOMPUTE稍后标记它,但是自动创建是使用默认示例触发的,我可以0 ROWS在手动创建中覆盖它。我也想知道这是否有原因。

sql-server statistics sql-server-2012 filestream

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

基于查找表的 T-SQL (SQL Server 2012) 更新

我有以下与此问题相关的表格:

CREATE TABLE tblTitan(
titanId int IDENTITY (15483,1) PRIMARY KEY,
userId int UNIQUE NOT NULL,
titanName varchar(15) NOT NULL,
titanExperience int DEFAULT 0,
titanLevel int DEFAULT 1,
titanStep int DEFAULT 1,
titanBattleCount int DEFAULT 0,
titanWinCount int DEFAULT 0,
titanLossCount int DEFAULT 0,
titanDateCreated date DEFAULT GetDate(),
titanDateLegend date DEFAULT NULL,
titanNpcFlag bit DEFAULT 0,
titanActiveFlag bit DEFAULT 1,
titanImage varchar(150) DEFAULT 'basicTitan.png',
titanElementType int NOT NULL UNIQUE,
FOREIGN KEY (userId) REFERENCES tblUser (userId),
FOREIGN KEY (titanElementType) REFERENCES tblElement (elementId), …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2012

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

How to resolve this 'XML Validation: Declaration not found for element' error?

I'm new to SQL Server and I have this task to complete (for learning purposes), yet I'm unable to figure out this error due to inexperience with XML Schemas (I think)

Here's what I'm trying to do -

  1. Create a table with 2 columns - ID, XML info for some product (non-typed).
  2. Add a row entry, that is, XML data for a product.
  3. Create an XML Schema for the XML-product-data.
  4. Bind this schema to the one (column) in the table. …

xml sql-server sql-server-2012 xsd

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

缩小没有任何插入/更新的数据库

我们有一个归档过程,其中我们对当前数据库进行备份并将其恢复为 xxx 归档数据库。现在这个数据库包含以前的数据,不会有任何插入/更新/删除。

由于此数据库仅用于报告,我们正在考虑缩小数据库。但是,这会增加索引碎片。我们正在考虑以下步骤:

  1. 通过重新组织缩小数据库
  2. 重新组织索引

这会影响数据库性能吗?我们还可以考虑哪些其他选择来恢复空间?

更新:在此过程中,我们将恢复模式改为simple,备份数据库,将数据库移出Pseudo-Simple状态,然后计划收缩数据库。

index sql-server shrink sql-server-2012

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

SQL Server 中有没有办法使表只能通过触发器插入?

标题是不言自明的,但如果您对我为什么想要这个感到好奇;我想要这个是因为我有一个存档/日志表来存储活动表的过去值,因此我不希望数据有以任何方式受到损害的风险。唯一应该在表上插入的是我在活动表上创建的触发器以记录其更改。在极少数情况下,我们可能需要手动编辑日志表,我将关闭(如果存在)“插入锁”

我将 SQL Server 2012 Enterprise 与 SQL Management Studio 结合使用

trigger sql-server permissions sql-server-2012

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

什么样的 exec 请求没有 sql 句柄?(sys.dm_exec_requests)

我针对 SQL Server 2012 创建了一个查询,如下所示:

SELECT r.session_id, r.sql_handle, t.text -- more details excluded for brevity
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
Run Code Online (Sandbox Code Playgroud)

现在,这有助于向我展示我的服务器上正在运行的内容——并且使用这样的查询,我已经能够找到比它们应该消耗更多资源的东西。

然而,令我困扰的是(因为交叉应用,我相信)sys.dm_exec_requests没有包含 sql_handle 值的条目不包括在内。我也担心有时返回的请求数量(通常大约有十几个)低于我基于负载的预期。

我明白(或认为我明白)这是我能看到的时间视图中最有限的快照,而且 SQL 一次只能做这么多事情,但我也想知道,我的查询缺少什么来向我展示“现在什么在使用我的服务器”?

sql-server dmv sql-server-2012

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

如何在对象所在的文件组中查找特定文件

今天,我在我管理的一个 SQL Server 上遇到了以下错误。

无法为数据库 '%.*ls' 中的对象 '%.*ls'%.*ls 分配空间,因为 '%.*ls' 文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。

它发生在索引重组操作期间。经过调查,我发现我的数据库被分成 3 个文件组,其中有多个文件。他们都至少有一个启用了自动增长的文件,并且托管它们的磁盘有足够的可用空间。那么为什么我的索引维护失败了呢?我的研究使我找到了这篇 MS 文章https://msdn.microsoft.com/en-us/library/aa337441.aspx,其中说:

当一个索引位于多个文件时,当其中一个文件已满时,ALTER INDEX REORGANIZE 会返回错误 1105。当进程尝试将行移动到完整文件时,重组进程被阻止。要解决此限制,请执行 ALTER INDEX REBUILD 而不是 ALTER INDEX REORGANIZE 或增加任何已满文件的文件增长限制。

好的。所以解决方案是重建索引,使其移动到新文件。但是,如果我想继续将索引保存在同一个文件中,以便我的重组可以继续,该怎么办?那可能吗?另外,是否可以找出我的数据库对象驻留在哪个文件中?大多数博客都有脚本来查找驻留在文件组中的对象,但我想在该文件组中查找文件,以便我可以手动增长它们并查看是否可以修复它。

sql-server filegroups sql-server-2012 index-maintenance

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