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-970

Gabe's questions

Martin Hope
Gabe
Asked: 2022-03-02 17:00:55 +0800 CST

用于存储退款交易信息的表格设计

  • 0

我有一个包含购买和退款的交易表。我想在同一张表中创建购买和退款之间的链接(我决定不使用单独的表)。我不确定链接应该朝哪个方向发展。(一次购买只能获得一次退款 - 这是有保证的)

  • 选项 1 - 退款与购买相关联
交易ID 上午 退款TrxID
1 10
2 -10 1
  • 选项 2 - 购买与退款相关联。(很容易看出一个 trx 是否有退款以及是哪一个)
交易ID 上午 退款TrxID
1 10 2
2 -10

有没有标准的建模方法?还是没关系,因为它基本上是相同的连接?

SQL Server,但适用于 RDBM

sql-server database-design
  • 1 个回答
  • 245 Views
Martin Hope
Gabe
Asked: 2019-07-18 15:34:47 +0800 CST

防止使用不同数据库中的过程更新表

  • 1

这是我的场景:

  • Windows 用户 Gabe 可以db_owner访问数据库 DB1。
  • Windows 用户 Gabe 拥有db_reader数据库 DB2。
  • 当用户执行UPDATE DB2.dbo.Tbl1 SET X = 1时,他们得到“更新权限被拒绝..”如预期的那样。
  • 当用户执行DB1.dbo.uspUpdateTable包含上述相同UPDATE语句的过程时,它会成功。

我认为这可能是由于数据库链接或值得信赖的设置,但它们未启用。

这是db_owner特权的预期行为吗?有没有办法防止这种情况?

SQL 服务器 2017

sql-server permissions
  • 1 个回答
  • 41 Views
Martin Hope
Gabe
Asked: 2019-06-19 06:54:13 +0800 CST

无法在非唯一索引上插入重复的键行?

  • 14

在过去的几天里,在 8 周没有错误之后,我们遇到了 3 次这个奇怪的错误,我很难过。

这是错误消息:

Executing the query "EXEC dbo.MergeTransactions" failed with the following error:
"Cannot insert duplicate key row in object 'sales.Transactions' with unique index
'NCI_Transactions_ClientID_TransactionDate'.
The duplicate key value is (1001, 2018-12-14 19:16:29.00, 304050920).".

我们拥有的索引不是唯一的。如果您注意到,错误消息中的重复键值甚至没有与索引对齐。奇怪的是,如果我重新运行 proc,它会成功。

这是我能找到的最新链接,它有我的问题,但我没有看到解决方案。

https://www.sqlservercentral.com/forums/topic/error-cannot-insert-duplicate-key-row-in-a-non-unique-index

关于我的场景的几件事:

  • proc 正在更新 TransactionID(主键的一部分) - 我认为这是导致错误的原因,但不知道为什么?我们将删除该逻辑。
  • 在表上启用更改跟踪
  • 做事务读取未提交

每个表有45个字段,我主要列出了索引中使用的字段。我正在更新语句中的 TransactionID(聚集键)(不必要)。奇怪的是,直到上周我们几个月都没有遇到任何问题。它只是通过 SSIS 偶尔发生。

桌子

USE [DB]
GO

/****** Object:  Table [sales].[Transactions]    Script Date: 5/29/2019 1:37:49 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[sales].[Transactions]') AND type in (N'U'))
BEGIN
CREATE TABLE [sales].[Transactions]
(
    [TransactionID] [bigint] NOT NULL,
    [ClientID] [int] NOT NULL,
    [TransactionDate] [datetime2](2) NOT NULL,
    /* snip*/
    [BusinessUserID] [varchar](150) NOT NULL,
    [BusinessTransactionID] [varchar](150) NOT NULL,
    [InsertDate] [datetime2](2) NOT NULL,
    [UpdateDate] [datetime2](2) NOT NULL,
 CONSTRAINT [PK_Transactions_TransactionID] PRIMARY KEY CLUSTERED 
(
    [TransactionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, DATA_COMPRESSION=PAGE) ON [DB_Data]
) ON [DB_Data]
END
GO
USE [DB]

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[sales].[Transactions]') AND name = N'NCI_Transactions_ClientID_TransactionDate')
begin
CREATE NONCLUSTERED INDEX [NCI_Transactions_ClientID_TransactionDate] ON [sales].[Transactions]
(
    [ClientID] ASC,
    [TransactionDate] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, DATA_COMPRESSION = PAGE) ON [DB_Data]
END

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[sales].[DF_Transactions_Units]') AND type = 'D')
BEGIN
ALTER TABLE [sales].[Transactions] ADD  CONSTRAINT [DF_Transactions_Units]  DEFAULT ((0)) FOR [Units]
END
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[sales].[DF_Transactions_ISOCurrencyCode]') AND type = 'D')
BEGIN
ALTER TABLE [sales].[Transactions] ADD  CONSTRAINT [DF_Transactions_ISOCurrencyCode]  DEFAULT ('USD') FOR [ISOCurrencyCode]
END
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[sales].[DF_Transactions_InsertDate]') AND type = 'D')
BEGIN
ALTER TABLE [sales].[Transactions] ADD  CONSTRAINT [DF_Transactions_InsertDate]  DEFAULT (sysdatetime()) FOR [InsertDate]
END
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[sales].[DF_Transactions_UpdateDate]') AND type = 'D')
BEGIN
ALTER TABLE [sales].[Transactions] ADD  CONSTRAINT [DF_Transactions_UpdateDate]  DEFAULT (sysdatetime()) FOR [UpdateDate]
END
GO

临时表

same columns as the mgdata. including the relevant fields. Also has a non-unique clustered index
(
    [BusinessTransactionID] [varchar](150) NULL,
    [BusinessUserID] [varchar](150) NULL,
    [PostalCode] [varchar](25) NULL,
    [TransactionDate] [datetime2](2) NULL,

    [Units] [int] NOT NULL,
    [StartDate] [datetime2](2) NULL,
    [EndDate] [datetime2](2) NULL,
    [TransactionID] [bigint] NULL,
    [ClientID] [int] NULL,

) 

CREATE CLUSTERED INDEX ##workingTransactionsMG_idx ON #workingTransactions (TransactionID)

It is populated in batches (500k rows at a time), something like this
IF OBJECT_ID(N'tempdb.dbo.#workingTransactions') IS NOT NULL DROP TABLE #workingTransactions;
select fields 
into #workingTransactions
from import.Transactions
where importrowid between two number ranges -- pseudocode

首要的关键

 CONSTRAINT [PK_Transactions_TransactionID] PRIMARY KEY CLUSTERED 
(
    [TransactionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, DATA_COMPRESSION=PAGE) ON [Data]
) ON [Data]

非聚集索引

CREATE NONCLUSTERED INDEX [NCI_Transactions_ClientID_TransactionDate] ON [sales].[Transactions]
(
    [ClientID] ASC,
    [TransactionDate] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, DATA_COMPRESSION = PAGE)

样本更新声明

-- updates every field
update t 
set 
    t.transactionid = s.transactionid,
    t.[CityCode]=s.[CityCode],
      t.TransactionDate=s.[TransactionDate],
     t.[ClientID]=s.[ClientID],
                t.[PackageMonths] = s.[PackageMonths],
                t.UpdateDate = @UpdateDate
              FROM #workingTransactions s
              JOIN [DB].[sales].[Transactions] t 
              ON s.[TransactionID] = t.[TransactionID]
             WHERE CAST(HASHBYTES('SHA2_256 ',CONCAT( S.[BusinessTransactionID],'|',S.[BusinessUserID],'|', etc)
                <> CAST(HASHBYTES('SHA2_256 ',CONCAT( T.[BusinessTransactionID],'|',T.[BusinessUserID],'|', etc)

我的问题是,引擎盖下发生了什么?解决方案是什么?作为参考,上面的链接提到了这一点:

在这一点上,我有几个理论:

  • 与内存压力或大型并行更新计划相关的错误,但我预计会出现不同类型的错误,到目前为止,我无法将低资源与这些孤立和零星错误的时间范围相关联。
  • UPDATE 语句或数据中的错误导致对主键的实际重复违规,但一些模糊的 SQL Server 错误导致错误消息引用错误的索引名称。
  • 由读取未提交隔离导致的脏读取导致大量并行更新双重插入。但是 ETL 开发人员声称使用了默认的已提交读,并且很难准确确定进程在运行时实际使用的隔离级别。

我怀疑如果我调整执行计划作为解决方法,也许是 MAXDOP (1) 提示或使用会话跟踪标志来禁用假脱机操作,错误就会消失,但目前尚不清楚这将如何影响性能

版本

Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64) 2018 年 11 月 30 日 12:57:58 版权所有 (C) 2017 Microsoft Corporation Enterprise Edition (64-bit) o​​n Windows Server 2016 Standard 10.0 (Build 14393) :)

sql-server update
  • 1 个回答
  • 6077 Views
Martin Hope
Gabe
Asked: 2019-02-22 13:11:13 +0800 CST

解码内联表值函数中的 URL 编码字符?

  • 2

我正在寻找一个内联表值函数来解码 URL 编码字符(如 %20 用于空格)。参考

我看到了其他函数,但还没有看到一个内联表值函数。我很想在函数中编写一堆 REPLACE 语句,但我想知道是否有更好的方法。

CREATE FUNCTION dbo.itvfURLDecode
(
    @StringValue VARCHAR(MAX)
)
RETURNS TABLE

AS
RETURN ( 
    SELECT REPLACE(REPLACE(@StringValue,'%2B','+'),'%20',' ') /* etc..*/ AS DecodedValue
)

;WITH cteData AS 
(
    SELECT 'This%2Bis%20a%20test%3C%3E%20ok%3F%20100%25' AS example
)
SELECT 
    example, q.DecodedValue  /* returns: This+is a test<> ok? 100% */
FROM cteData c
CROSS APPLY dbo.itvfURLDecode(example) q
sql-server sql-server-2017
  • 1 个回答
  • 943 Views
Martin Hope
Gabe
Asked: 2019-02-08 06:38:07 +0800 CST

我应该在 SQL Server 中使用已弃用的 MD5 函数吗?

  • 4

我们希望将 MD5 用于我们的散列函数而不是 SHA_256,但从 SQL Server 2016 开始,不推荐使用 MD5。我们将其用于散列(比较哪些记录已更改)。我们现在面临着使用此函数或使用 SHA_256 导致存储和性能开销的风险。令人沮丧的是,微软决定弃用这些功能,即使它们在某些情况下仍然有用。

该项目不是业务的关键组成部分。我们可能会选择 SHA_256,但这是正确的选择吗?新开发是否应该始终避免已弃用的功能?

对于上下文 - 每天将大约 1-2 百万个更新插入到一个 4 亿行表中,比较动态的哈希字节。大约 30 列宽

https://learn.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql?view=sql-server-2017

在 HashBytes 函数中选择正确的算法

sql-server sql-server-2017
  • 1 个回答
  • 2075 Views
Martin Hope
Gabe
Asked: 2018-07-12 14:50:14 +0800 CST

谓词下推视图以优化查询?

  • 1

我有一个引用具有 300M 记录的事实表 Cost 的视图。该视图也有几个连接。事实表在 Date 上有一个聚集索引,视图定义是这样的:

select * 
from FactCost f
INNER JOIN SomeOtherTable b on a.id = f.id
where f.Date < getdate()-7

如果我像下面这样查询视图,优化器首先处理视图中的谓词,然后处理我查询中的日期。所以它实际上读取了 300M 条记录,只返回 100 万条记录。我无法弄清楚我可以尝试优化哪种解决方法。

SELECT
              *
    FROM [dbo].vwFactCost
    WHERE Date >= '2011-07-01'
        AND Date <= '2011-07-31'

见下文 在此处输入图像描述


编辑

:

我遇到了解决方案不直观的另一种情况。

表:FactRegistration有 300m 条记录,30 列, RegDate是日期列

以下是视图定义:

SELECT <columns>
FROM FactRegistration fr
WHERE FR.RegDate < CAST(DATEADD(DAY,-7,GETDATE()) AS DATE)

询问:

SELECT <columns>
INTO #tmp
FROM edw.dbo.vwDemo_slow fr
WHERE fr.RegDate >= CAST('20140501' AS DATE)
    AND fr.RegDate <= CAST('20140531' AS DATE)

该计划的结果(https://gist.github.com/gflores1023/f0f0089315841d21ab072837cf12145d): 在此处输入图像描述

如果我将视图定义更改为使用此 WHERE 子句:

WHERE FR.RegDate < CAST(CAST(DATEADD(DAY,-7,GETDATE()) AS DATE) AS DATETIME)

我有一个更好的计划(https://gist.github.com/gflores1023/e3904609c98babbbbc646eaec76ebba4):

在此处输入图像描述

运行 SQL Server 2016 SP1

sql-server optimization
  • 1 个回答
  • 1671 Views
Martin Hope
Gabe
Asked: 2018-05-16 14:42:09 +0800 CST

在 SSMS 中隐藏底部状态栏

  • 0

有没有办法隐藏最底部的状态栏?它没有那么多有用的信息(行号、列号等)并且占用了大量的屏幕空间。我不认为它是可以隐藏的,但我想我会问。

见下图 在此处输入图像描述

SSMS 17.6

ssms
  • 1 个回答
  • 210 Views
Martin Hope
Gabe
Asked: 2017-11-08 06:55:15 +0800 CST

SQL Sentry Plan Explorer - 计划图中的执行模式?

  • 1

将鼠标悬停在运算符上时,计划资源管理器是否会在计划图中显示执行模式(估计/实际)?我找不到它。我确实在“计划树”和“顶级操作”窗格中看到了它。

下面是显示的 SSMS 与未显示的 Plan Explorer。

安全管理系统 计划探索者

sql-server execution-plan
  • 2 个回答
  • 131 Views
Martin Hope
Gabe
Asked: 2015-11-05 09:02:45 +0800 CST

Where 子句过滤 Azure Stretch 数据库的行?

  • 3

目前 SQL Server 2016 中的拉伸数据库将整个表移动到 Azure。然而,这篇InfoQ 文章提到了 Stretch 数据库的“归档行”模式,它允许您过滤表中的哪些行要移动到云端(例如 2010 年之前的记录)。我还没有找到任何有关此未发布功能的官方 Microsoft 文档。

有人能告诉我官方消息来源说这是针对 RTM 的吗?我确实在 MSDN 上找到了一篇提到它的法语博客条目,但没有别的。

sql-server sql-server-2016
  • 1 个回答
  • 134 Views
Martin Hope
Gabe
Asked: 2015-10-22 08:21:37 +0800 CST

估计的行大小和估计的数据大小不正确

  • 3

我有一个 900 万条记录表,大小约为 452MB(不考虑 NC 索引)。以下是身体数据和列

身体数据

列

举个简单的例子,如果我将表转储到临时表中,实际计划显示的估计和实际数据大小高达 42GB。见下图。

我怀疑这是由于两个 varchar(4000) 列导致估计的行大小比它们大。但是,我真的不认为正在传输 42GB - 不知道这怎么可能。我不知道我是否因此而看到性能问题,但由于这些错误的估计,查询计划看起来很可怕。为什么查询计划在估计的和实际的表扫描上如此错误?

实际计划

sql-server sql-server-2012
  • 1 个回答
  • 6468 Views
Martin Hope
Gabe
Asked: 2015-08-05 09:25:43 +0800 CST

查找当前正在运行的扩展事件会话何时开始?

  • 6

对于老式跟踪,我可以查看 sys.traces 或 SQL Server 日志来查找跟踪何时开始。扩展事件有类似的东西吗?我遇到了这个关于使用 DDL 触发器的博客条目,但我想知道是否有更好的方法。

SQL Server 2012-2014

sql-server
  • 2 个回答
  • 5498 Views
Martin Hope
Gabe
Asked: 2015-08-01 10:31:39 +0800 CST

重建索引时何时使用 sort_in_tempdb?

  • 29

我们正在讨论是否对我们的 DW 表使用 SORT_IN_TEMPDB 选项。我的理解是,使用此选项时会有更多的写入,尽管它们更具顺序性。我们有一个 SAN(它有时非常慢),所以在我们的例子中,我们希望尽可能地限制写入次数。我相信 tempdb 位于单独的 LUN(磁盘集)上。

我们的数据文件和 tempdb 文件中有足够的磁盘空间。在这种情况下,我们会从使用 SORT_IN_TEMPDB 中受益吗?

让我印象深刻的一件事是对这个答案的评论

重建索引时,您需要两倍的索引空间 + 20% 用于排序。因此,通常要重建数据库中的每个索引,您只需要数据库中最大索引的 120%。如果您使用 SORT_IN_TEMPDB,您只赢了 20%,您的数据文件中还需要额外的 100%。此外,在 tempdb 中使用 sort 会大大增加 IO 负载,因为您现在不是将索引一次写入数据文件,而是将其写入 tempdb 一次,然后将其写入数据文件。所以这并不总是理想的。

我们绝对不希望使用缓慢/可能配置错误的 SAN 来增加 IO 负载。

测试这个的最好方法是什么?通过简单地重建带有和不带有选项的表并记录时间?

编辑:我们有 8 个 tempdb 文件,每个 15GB。我们确实设置了 TF 1117/1118 标志并启用了 IFI。我们目前使用 sort_in_tempdb 选项和不使用它进行重建的混合。

谢谢!

SQL Server 2012 企业版

sql-server sql-server-2012
  • 1 个回答
  • 30897 Views
Martin Hope
Gabe
Asked: 2015-06-27 09:03:48 +0800 CST

XQuery on Extended Events 加入 dm_exec_query_plan 不工作[重复]

  • 0
这个问题在这里已经有了答案:
将 VARCHAR 转换为 VARBINARY (2 个答案)
7 年前关闭。

我有这个 XQuery 用于我的扩展事件会话,它工作正常但是当我尝试将 plan_handle 加入 dm_exec_query_plan 以获取查询计划时,它说

消息 257,级别 16,状态 3,第 1 行不允许从数据类型 varchar 到 varbinary 的隐式转换。使用 CONVERT 函数运行此查询。

如果我转换为 varbinary,这就是我收到的错误。

“消息 569,级别 16,状态 5,第 1 行传递给 dm_exec_query_plan 的句柄无效。”

如果我手动将句柄传递给 DMF,它就可以正常工作。这是它在 varchar 格式中的样子(添加 0x 之后)

0x06000700f9971028f01033ae030000000100000000000000000000000000000000000000000000000000000

SELECT
        q.Time
        ,q.[CPU (ms)]
        ,q.[Duration (s)]
        ,q.[SQL Statement]
        ,q.plan_handle
FROM (
SELECT
        data.value(     '(/event[@name="sql_statement_completed"]/@timestamp)[1]', 'DATETIME') AS [Time]
        ,data.value(        '(/event/data[@name=''cpu'']/value)[1]', 'INT') AS [CPU (ms)]
        ,CONVERT(float, data.value('(/event/data[@name="duration"]/value)[1]', 'BIGINT')) / 1000000
        AS [Duration (s)]
        ,data.value(
        '(/event/action[@name=''sql_text'']/value)[1]', 'VARCHAR(MAX)') AS [SQL Statement]
        --,data.value('(/event/action[@name=''plan_handle'']/value)[1]', 'varchar(4000)')       AS [PlanHandle]
        ,'0x' + CAST(data.value('(/event/action[@name="plan_handle"]/value)[1]', 'varchar(4000)') AS varchar(4000)) AS plan_handle
    FROM (
        SELECT
            CONVERT(xml, event_data) AS data
        FROM sys.fn_xe_file_target_read_file
        ('H:\SQLskills\EE_ExpensiveQueries*.xel', 'H:\SQLskills\EE_ExpensiveQueries*.xem', NULL, NULL)
    ) entries
    )q
    CROSS APPLY sys.dm_exec_query_plan(plan_handle)
sql-server-2012 extended-events
  • 1 个回答
  • 429 Views
Martin Hope
Gabe
Asked: 2014-10-08 11:55:04 +0800 CST

查看在简单恢复模型中使用了多少事务日志

  • 1

我们在简单恢复模型中有一个 DW 数据库。每天晚上,我们从不同来源加载数据并运行一些过程。我想看看在这个需要数小时才能运行的夜间负载中实际使用了多少事务日志。

目前,由于我们最近运行的一次性清理查询,日志已经膨胀到超过 50GB。由于简单恢复模式,日志上的已用空间接近 0%。我们想将日志文件缩小到更合理的大小。我怀疑每晚负载只使用 5GB,但有没有办法真正找到它?我想每隔一两晚轮询一次数据库,并在日志表中捕获已使用和未使用的空间。有没有更好的办法?

sql-server-2012 transaction-log
  • 1 个回答
  • 64 Views
Martin Hope
Gabe
Asked: 2014-06-28 10:32:51 +0800 CST

在具有累积更新 #10 的实例上安装 SQL Server 2012 SP2

  • 1

由于对 DQS 的特定修复,我们需要在 SQL Server 2012 SP1 上安装累积更新 #10。

由于最近发布的 SQL Server 2012 SP2 仅包含从 CU1 到 CU #9的修复,如果我们决定更新到 SP2,是否会覆盖并删除 CU #10 中的修复?如果是这样,我们可以重新应用 CU#10 吗?或者我们是否必须等到为 SQL Server 2012 SP2 制作另一个 CU?

  • http://support.microsoft.com/KB/2958429
  • http://support.microsoft.com/kb/2954099
sql-server-2012
  • 1 个回答
  • 5553 Views
Martin Hope
Gabe
Asked: 2013-12-12 08:05:00 +0800 CST

SentryOne Plan Explorer 是否计算 UDF 中的读取数?

  • 9

我有这样的查询:

select dbo.fn_complexFunction(t.id)
from mytable t

在SQL Sentry Plan Explorer中,我注意到我必须运行 Get Estimated Plan 以使查询计划包含 UDF。

运行“获取实际计划”时,逻辑读取和其他指标似乎不包括 UDF 中发生的操作。在这种情况下,使用 Profiler 是唯一的解决方法吗?

sql-server sql-server-2008
  • 1 个回答
  • 741 Views
Martin Hope
Gabe
Asked: 2013-10-18 14:05:43 +0800 CST

SQL Server 上的高 CPU 使用率

  • 3

我们有一个包含 SQL Server 2008R2 和大约 50 个数据库的客户服务器。问题是 CPU 使用率达到 100%(或接近)并且持续了几个小时。这通常发生在早上(通常在早上 6 点到 9 点左右)。平均 CPU 使用率为 30%

我们查看了预定的报告,但找不到任何东西——我们确实决定在早上早些时候安排它们,但没有任何作用。

我明天要去远程调查这个问题。我们已经重建了索引,但这并没有帮助。我有一组 DMV 来检查具有最高工作时间和最长运行时间的查询。

SQL Server 是否跟踪所有运行的查询,以便 DMV 可以访问信息?还有哪些其他 sql 片段有助于诊断问题?

编辑:内存使用率也很高——大约 80-90%。实际上,另一台服务器同时遇到了同样的问题,我相信它们都托管在 citrix 服务器上。

我们还进行了索引重建。

sql-server-2008
  • 2 个回答
  • 5961 Views
Martin Hope
Gabe
Asked: 2011-10-19 09:16:00 +0800 CST

哪种报告方法性能更好,使用链接服务器还是使用 SSRS 中的查找?

  • 2

当我使用没有链接服务器选项的不同服务器时,我一直在使用 Reporting Services 2008 R2 中的新查找功能。但是,DBA 刚刚创建了指向该服务器的链接,我想知道是否可以通过更改查询/报告来使用它而不是查找功能来获得更好的性能。

我肯定有更多的灵活性去链接服务器路由,但我不确定性能。

sql-server linked-server
  • 1 个回答
  • 1045 Views
Martin Hope
Gabe
Asked: 2011-10-15 13:53:28 +0800 CST

设计这张里程表的最佳方法是什么?

  • 4

我将填充每加仑英里数 (MPG) 表。它来自里程表源。

目前是这样设置的:

  id               (primary_key)
, truck_num
, start_date
, end_date
, start_miles
, end_miles
, start_fuel
, end_fuel
, miles
, gals
, mpg

似乎有一些冗余。是miles, (end_miles - start_miles)同上gals。

我们是否应该预先计算这些列miles并gals存储在数据库中?它肯定会使查询更容易,但会以空间为代价。计算的问题相同mpg。计算列会减慢速度,不是吗?

什么索引最有效?每周大约有 3000 辆卡车(记录)分批插入。

我正在使用 SQL Server 2008 R2。

编辑:我将使用的示例查询

-- find average mpg for since ytd
select m.truck_num, avg(mpg)
from mpg m
join truck t on t.truck_num = m.truck_num
where start_date >= @begin_of_year and end_date <= @today
group by truck_num
sql-server-2008 database-design
  • 2 个回答
  • 1596 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