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

swasheck's questions

Martin Hope
swasheck
Asked: 2016-03-11 12:59:48 +0800 CST

是否存在一种方法来确定包含多个文件的文件组中的分配单元的确切文件?

  • 13

我希望能够详细了解哪些数据库文件包含数据库中各种 HoBT(对齐和非对齐)的分配单元。

在我们开始为每个文件组创建多个数据文件之前,我一直使用的查询(见下文)对我很有用,而且我只能弄清楚如何获得文件组级别的粒度。

select 
    SchemaName = sh.name, 
    TableName = t.name, 
    IndexName = i.name, 
    PartitionNumber = p.partition_number,
    IndexID = i.index_id,
    IndexDataspaceID = i.data_space_id,
    AllocUnitDataspaceID = au.data_space_id,
    PartitionRows = p.rows
from sys.allocation_units au
join sys.partitions p
    on au.container_id = p.partition_id
join sys.indexes i 
    on i.object_id = p.object_id
    and i.index_id = p.index_id
join sys.tables t 
    on p.object_id = t.object_id
join sys.schemas sh
    on t.schema_id = sh.schema_id
where sh.name != 'sys'
    and au.type = 2
union all 
select 
    sh.name, 
    t.name, 
    i.name, 
    p.partition_number,
    i.index_id,
    i.data_space_id,
    au.data_space_id,
    p.rows
from sys.allocation_units au
join sys.partitions p
    on au.container_id = p.hobt_id
join sys.indexes i 
    on i.object_id = p.object_id
    and i.index_id = p.index_id
join sys.tables t 
    on p.object_id = t.object_id
join sys.schemas sh
    on t.schema_id = sh.schema_id
where sh.name != 'sys'
    and au.type in (1,3)
order by t.name, i.index_id,p.partition_number;

但是,当文件组中有多个文件时,此查询将不起作用,因为我只能将分配单元与数据空间相关联,并最终与文件组相关联。我想知道是否还有我遗漏的另一个 DMV 或目录,我可以使用它来进一步识别文件组中的哪个文件包含分配单元。

这个问题背后的问题是我正在尝试评估压缩分区结构的实际效果。我知道我可以FILEPROPERTY(FileName,'SpaceUsed')对文件进行前后对比sys.allocation_units.used_pages/128.以获取此信息,但练习本身让我想知道我是否可以识别包含特定分配单元的特定文件。

我一直在胡闹,%%physloc%%希望它能有所帮助,但它并不能完全满足我的需求。以下链接由Aaron Bertrand提供:

  • 我的行在哪里?– 使用 %%physloc%% 虚拟列(sqlity.net)
  • SQL Server 2008:Paul Randal的新(未记录的)物理行定位器函数
sql-server sql-server-2014
  • 2 个回答
  • 1188 Views
Martin Hope
swasheck
Asked: 2016-01-06 13:02:58 +0800 CST

是否可以强制优化器消除此分区视图中不相关的表?

  • 22

我正在为大表测试不同的体系结构,我看到的一个建议是使用分区视图,从而将一个大表分成一系列较小的“分区”表。

1 , 2 , 3 , 4

在测试这种方法时,我发现了一些对我来说意义不大的东西。当我在事实视图上过滤“分区列”时,优化器只在相关表上查找。此外,如果我在维度表上过滤该列,优化器会消除不必要的表。

但是,如果我过滤优化器在每个基表的 PK/CI 上寻找的维度的其他方面。

以下是有问题的查询:

select 
    od.[Year], 
    AvgValue = avg(ObservationValue)
from dbo.v_Observation o 
join dbo.ObservationDates od
    on o.ObservationDateKey = od.DateKey
where o.ObservationDateKey >= 20000101
    and o.ObservationDateKey <= 20051231
group by od.[Year];

select 
    od.[Year], 
    AvgValue = avg(ObservationValue)
from dbo.v_Observation o 
join dbo.ObservationDates od
    on o.ObservationDateKey = od.DateKey
where od.DateKey >= 20000101
    and od.DateKey <= 20051231
group by od.[Year];

select 
    od.[Year], 
    AvgValue = avg(ObservationValue)
from dbo.v_Observation o 
join dbo.ObservationDates od
    on o.ObservationDateKey = od.DateKey
where od.[Year] >= 2000 and od.[Year] < 2006
group by od.[Year];

关键的事实过滤器

按键上的暗淡过滤器

方面的暗淡过滤器

下面是SQL Sentry Plan Explorer 会话的链接。

我正在努力对较大的表进行实际分区,以查看是否可以通过分区消除以类似的方式做出响应。

我确实为在维度的一个方面进行过滤的(简单)查询进行了分区消除。

同时,这里是数据库的仅统计副本:

https://gist.github.com/swasheck/9a22bf8a580995d3b2aa

“旧的”基数估计器得到一个更便宜的计划,但这是因为对每个(不必要的)索引搜索的基数估计较低。

我想知道是否有办法让优化器在按维度的另一个方面进行过滤时使用键列,以便它可以消除对不相关表的搜索。

SQL 服务器版本:

Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 
    Feb 20 2014 20:04:26 
    Copyright (c) Microsoft Corporation
    Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
sql-server sql-server-2014
  • 2 个回答
  • 877 Views
Martin Hope
swasheck
Asked: 2015-07-21 09:51:49 +0800 CST

为什么这两个 HADR DMV 报告不同的状态?

  • 8

SQL Server 2012(11.0.5058.0)企业版

我们在一个 2(HA)+1(DR) 集群中有 8 个可用性组,我们的监控 DMV 报告的结果让我感到困惑。6 个可用性组配置用于 HA 和 DR,1 个仅配置 HA,1 个仅配置 DR。

6 个 HA/DR 可用性组中的每一个都将“SQLB”作为主要副本,将“SQLA”作为辅助(同步)HA 副本,将“SQLC”作为辅助(异步)副本。

在两个次级:

SELECT dhags.group_id, dhags.synchronization_health_desc
FROM sys.dm_hadr_availability_group_states dhags

报告所有可用性组复制同步运行状况NOT_HEALTHY均为

select replica_id,synchronization_health_desc
from sys.dm_hadr_availability_replica_states

报告所有副本的同步健康状况为HEALTHY.

主副本报告所有可用性组和副本的同步运行状况为HEALTHY.

虽然我知道一个报告副本同步健康状况而另一个报告 AG 同步健康状况,但在我看来,如果更细粒度 (AG) 状态不健康,那将影响更广泛的上下文(副本)的整体健康状况,这似乎是合乎逻辑的. 我找不到描述每个级别的运行状况如何确定的 MSDN 文档。

为什么辅助节点会报告NOT_HEALTHY可用性组同步健康状况,但会报告HEALTHY副本同步健康状况,为什么这与主要报告不同?

sql-server-2012 availability-groups
  • 1 个回答
  • 584 Views
Martin Hope
swasheck
Asked: 2015-02-05 14:09:42 +0800 CST

stats_column_id 和 index_column_id 不随聚集索引的物理顺序变化而更新

  • 15

除非我误解了该列的用途,否则以下代码表明聚集索引结构的更改不会更改stats_column_id列在sys.stats_columns DMV 中的序号位置 ( )。(在 AdventureWorks2014、AdventureWorks2008R2 测试)

select i.name, c.name, ic.column_id, ic.index_column_id
from sys.indexes i 
join sys.index_columns ic
    on i.object_id = ic.object_id
    and i.index_id = ic.index_id
join sys.columns c 
    on i.object_id = c.object_id
    and ic.column_id = c.column_id
where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by ic.key_ordinal;

select sh.name,s.name, c.name, c.column_id, sc.column_id, sc.stats_column_id
from sys.stats s 
join sys.stats_columns sc
    on s.object_id = sc.object_id
    and s.stats_id = sc.stats_id
join sys.columns c 
    on s.object_id = c.object_id
    and sc.column_id = c.column_id
join sys.tables t 
    on s.object_id = t.object_id
join sys.schemas sh
    on t.schema_id = sh.schema_id
where s.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by sc.stats_column_id;

dbcc show_statistics('[Person].[BusinessEntityAddress]','PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID') with density_vector;

ALTER TABLE [Person].[BusinessEntityAddress] DROP CONSTRAINT [PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID]
GO

ALTER TABLE [Person].[BusinessEntityAddress] ADD  CONSTRAINT [PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID] PRIMARY KEY CLUSTERED 
(
    AddressID ASC,
    [BusinessEntityID] ASC, 
    [AddressTypeID] ASC
)
GO


select i.name, c.name, ic.column_id, ic.index_column_id
from sys.indexes i 
join sys.index_columns ic
    on i.object_id = ic.object_id
    and i.index_id = ic.index_id
join sys.columns c 
    on i.object_id = c.object_id
    and ic.column_id = c.column_id
where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by ic.key_ordinal;

select sh.name,s.name, c.name, c.column_id, sc.column_id, sc.stats_column_id
from sys.stats s 
join sys.stats_columns sc
    on s.object_id = sc.object_id
    and s.stats_id = sc.stats_id
join sys.columns c 
    on s.object_id = c.object_id
    and sc.column_id = c.column_id
join sys.tables t 
    on s.object_id = t.object_id
join sys.schemas sh
    on t.schema_id = sh.schema_id
where s.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by sc.stats_column_id;

dbcc show_statistics('[Person].[BusinessEntityAddress]','PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID') with density_vector;

但是,密度向量表示索引/统计对象的前导列发生了变化。这是我的根本误解吗?如果是这样,我如何使用 DMV 找到统计对象的前导列?

经过测试的 SQL Server 版本:2008R2、2014

sql-server statistics
  • 2 个回答
  • 715 Views
Martin Hope
swasheck
Asked: 2014-09-11 08:13:07 +0800 CST

切换数据失败,“允许目标表上的检查约束或分区函数不允许的值”

  • 14

鉴于以下

-- table ddl
create table dbo.f_word(
    sentence_id int NULL,
    sentence_word_id int NULL,
    word_id int NULL,
    lemma_id int NULL,
    source_id int NULL,
    part_of_speech_id int NULL,
    person_id int NULL,
    gender_id int NULL,
    number_id int NULL,
    tense_id int NULL,
    voice_id int NULL,
    mood_id int NULL,
    case_id int NULL,
    degree_id int NULL,
    citation nvarchar(100) NULL
);
-- create partition function
create partition function pf_f_word_source_id (int)
as range left for values 
(
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,
    15,16,17,18,19,20,21,22,23
);

-- create the partition scheme
create partition scheme ps_f_word as partition pf_f_word_source_id to 
(
    [primary],[primary],[primary],[primary],[primary],[primary],[primary],[primary],[primary],
    [primary],[primary],[primary],[primary],[primary],[primary],[primary],[primary],[primary],
    [primary],[primary],[primary],[primary],[primary],[primary]
);

-- partition the index
create unique clustered index cix_fword on dbo.f_word 
(
    source_id,
    sentence_id,
    sentence_word_id,
    word_id,
    lemma_id,
    part_of_speech_id,
    person_id,
    gender_id,
    number_id,
    tense_id,
    voice_id,
    mood_id,
    case_id,
    degree_id 
)
on ps_f_word (source_id);

-- swapin table ddl

create table dbo.f_word_swapin(
    sentence_id int NULL,
    sentence_word_id int NULL,
    word_id int NULL,
    lemma_id int NULL,
    source_id int NULL,
    part_of_speech_id int NULL,
    person_id int NULL,
    gender_id int NULL,
    number_id int NULL,
    tense_id int NULL,
    voice_id int NULL,
    mood_id int NULL,
    case_id int NULL,
    degree_id int NULL,
    citation nvarchar(100) NULL
) on [primary];

-- create the same index on the swapin table
create unique clustered index cix_fword_swapin on dbo.f_word_swapin 
(
    source_id,
    sentence_id,
    sentence_word_id,
    word_id,
    lemma_id,
    part_of_speech_id,
    person_id,
    gender_id,
    number_id,
    tense_id,
    voice_id,
    mood_id,
    case_id,
    degree_id 
);

-- add check constraints WITH CHECK
ALTER TABLE dbo.f_word_swapin
WITH CHECK
ADD CONSTRAINT ck_f_word_swapin_lb
CHECK ( source_id > 12);

ALTER TABLE dbo.f_word_swapin
WITH CHECK
ADD CONSTRAINT ck_f_word_swapin_ub
CHECK ( source_id <= 13);

然后,移动数据:

-- switch data OUT of the partitioned table
ALTER TABLE dbo.f_word
SWITCH PARTITION 13 TO dbo.f_word_swapin;

-- attempt to switch data back IN 
ALTER TABLE dbo.f_word_swapin
SWITCH TO dbo.f_word PARTITION 13;

下面是“Script Table As ... CREATE”DDL,只是为了验证相同的表结构。

/****** Object:  Table [dbo].[f_word_swapin]    Script Date: 9/10/2014 10:01:01 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[f_word_swapin](
    [sentence_id] [int] NULL,
    [sentence_word_id] [int] NULL,
    [word_id] [int] NULL,
    [lemma_id] [int] NULL,
    [source_id] [int] NULL,
    [part_of_speech_id] [int] NULL,
    [person_id] [int] NULL,
    [gender_id] [int] NULL,
    [number_id] [int] NULL,
    [tense_id] [int] NULL,
    [voice_id] [int] NULL,
    [mood_id] [int] NULL,
    [case_id] [int] NULL,
    [degree_id] [int] NULL,
    [citation] [nvarchar](100) NULL
) ON [PRIMARY]

/****** Object:  Table [dbo].[f_word]    Script Date: 9/10/2014 10:09:43 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[f_word](
    [sentence_id] [int] NULL,
    [sentence_word_id] [int] NULL,
    [word_id] [int] NULL,
    [lemma_id] [int] NULL,
    [source_id] [int] NULL,
    [part_of_speech_id] [int] NULL,
    [person_id] [int] NULL,
    [gender_id] [int] NULL,
    [number_id] [int] NULL,
    [tense_id] [int] NULL,
    [voice_id] [int] NULL,
    [mood_id] [int] NULL,
    [case_id] [int] NULL,
    [degree_id] [int] NULL,
    [citation] [nvarchar](100) NULL
)

GO

SWITCHing OUT 工作得很好。SWITCHing IN 会产生以下错误:

消息 4972,级别 16,状态 1,第 1 行 ALTER TABLE SWITCH 语句失败。源表“greek.dbo.f_word_swapin”的检查约束或分区函数允许目标表“greek.dbo.f_word”上的检查约束或分区函数不允许的值。

跑步:

select target_partition_id = $PARTITION.pf_f_word_source_id(source_id), 
    *
from dbo.f_word_swapin;

验证所有数据都应该返回到分区 13。

我对分区真的很陌生,所以我确定我做错了,我只是不知道它是什么。

sql-server partitioning
  • 1 个回答
  • 5241 Views
Martin Hope
swasheck
Asked: 2014-03-05 08:15:58 +0800 CST

我如何解释这些 DMV 的结果以帮助我评估我们的分区策略?

  • 12

版本:SQL Server 2008 R2 企业版。(10.50.4000)

为了评估我们的分区策略,我编写了这个查询来获取针对分区索引的访问方法(在最广泛的意义上,尽管我正在消除堆)。range_scan_count当我将注意力集中在分区表上时,我相信我需要查看singleton_lookup_count但很难概念化。

SELECT 
    t.name AS table_name,
    i.name AS index_name,
    ios.partition_number, 
    leaf_insert_count,
    leaf_delete_count,
    leaf_update_count,
    leaf_ghost_count,
    range_scan_count,
    singleton_lookup_count,
    page_latch_wait_count ,
    page_latch_wait_in_ms,
    row_lock_count ,
    page_lock_count,
    row_lock_wait_in_ms ,
    page_lock_wait_in_ms,
    page_io_latch_wait_count ,
    page_io_latch_wait_in_ms
FROM sys.dm_db_partition_stats ps
    JOIN sys.tables t 
        ON ps.object_id = t.object_id
    JOIN sys.schemas s 
        ON t.schema_id = s.schema_id
    JOIN sys.indexes i 
        ON t.object_id = i.object_id
    AND ps.index_id = i.index_id
OUTER APPLY sys.dm_db_index_operational_stats(DB_ID(), NULL, NULL, NULL) ios                            
WHERE   
    ps.object_id = ios.object_id
    AND ps.index_id = ios.index_id
    AND ps.partition_number = ios.partition_number
    and ps.index_id = ios.index_id
    and ps.partition_number = ios.partition_number                                  
    and s.name <> 'sys'     
    and ps.index_id <> 0 ;

相关输出(考虑到 SO 表格格式的差距,这是上面查询的前 9 列的示例,最后两列分别为range_scan_count和singleton_lookup_count):

╔════════╦═════════════════╦════╦═══╦═══╦═══╦═══╦════════╦══════════╗
║ datetb ║ idx_datetb_col  ║  1 ║ 0 ║ 0 ║ 0 ║ 0 ║ 205740 ║  3486408 ║
║ datetb ║ idx_datetb_col  ║  2 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  1079649 ║
║ datetb ║ idx_datetb_col  ║  3 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  1174547 ║
║ datetb ║ idx_datetb_col  ║  4 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  2952991 ║
║ datetb ║ idx_datetb_col  ║  5 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  3974886 ║
║ datetb ║ idx_datetb_col  ║  6 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  2931450 ║
║ datetb ║ idx_datetb_col  ║  7 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  3316960 ║
║ datetb ║ idx_datetb_col  ║  8 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  3393439 ║
║ datetb ║ idx_datetb_col  ║  9 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  3735495 ║
║ datetb ║ idx_datetb_col  ║ 10 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  4803804 ║
║ datetb ║ idx_datetb_col  ║ 11 ║ 0 ║ 0 ║ 0 ║ 0 ║  29617 ║  7655091 ║
║ datetb ║ idx_datetb_col  ║ 12 ║ 1 ║ 0 ║ 0 ║ 0 ║ 174326 ║ 47377226 ║
╚════════╩═════════════════╩════╩═══╩═══╩═══╩═══╩════════╩══════════╝

我看到了一些不同的可能性,但我需要一些关于如何思考这个的方向(当然我在“可能”中表达这个因为我知道“这取决于”,但我也在寻找概念理解):

  1. 所有分区的相似值range_scan_count 可能表明我们没有得到很好的分区消除,因为我们扫描所有分区的次数大致相同。
  2. 所有分区的不同值singleton_lookup_count伴随着明显较低的值range_scan_count 可能表明分区消除频率很高,因为我们扫描的次数少于我们正在寻找的次数。
  3. ?

到目前为止,这些是我的想法。我希望有人权衡我如何使用这个或另一组信息来确定哪些表最有可能从完全放弃分区以支持索引中受益。

编辑

这是一个剪辑的 DDL:

CREATE TABLE [dbo].[date_table](
    [date_id] [int] NOT NULL,
    [calendar_date] [datetime] NULL,
    [valdate] [datetime] NULL,
        CONSTRAINT [PK_datedb] PRIMARY KEY CLUSTERED 
        (
            [date_id] ASC
        ) ON [partschm]([date_id]);

CREATE UNIQUE NONCLUSTERED INDEX [idx_datetb_col] ON [dbo].[date_table]
(
    [calendar_date] DESC,
    [date_id] ASC
) ON [partschm]([date_id])
GO
sql-server-2008-r2 partitioning
  • 1 个回答
  • 292 Views
Martin Hope
swasheck
Asked: 2014-01-08 13:08:03 +0800 CST

我是否应该使我的 SQL Server 文件和增长大小与我的 SAN 上的块大小保持一致?

  • 4

我注意到我们的 (Hitachi) SAN 以 42MB 块处理数据。它是分层存储,因此当 director 决定何时应该将存储提升/降级为更快/更慢的存储时,每个块都会被评估。在没有将特定 LUN“固定”到特定层的政治权重的情况下,我正在尽我所能来设置我的 SQL Server (2008 R2 Enterprise) 实例以取得成功。

因此,我想知道将我的文件大小和文件增长大小更改为 42 的倍数是否会有任何好处/损害?示例数据库将SIZE=57886MB带有FILEGROWTH=5124MB.

我看到了额外读取的可能性(因为 (42*1024)/8 = 8601.6,但是 (42*1024)/64 = 672)但我不确定我是否完全掌握了这里的所有概念。

sql-server-2008-r2 datafile
  • 1 个回答
  • 194 Views
Martin Hope
swasheck
Asked: 2013-10-02 11:39:39 +0800 CST

为什么 SQL Server 2008 R2 中的这些事务 DMV 之间存在差异?

  • 7

当我执行下面的两个查询时,

SELECT 
    session_id, transaction_id
    FROM sys.dm_tran_session_transactions;

和

SELECT 
    session_id, request_id, at.transaction_id
    FROM sys.dm_tran_active_transactions at
        JOIN sys.dm_exec_requests r
            ON r.transaction_id = at.transaction_id;

我已经阅读了1和2的 BOL,但没有看到任何关于为什么会出现差异的明确解释。

我得到不同的结果。前者查询不返回任何结果,但后者返回具有会话和事务 ID 的活动事务。是 0,我认为这request_id意味着它是会话发出的唯一请求。有人可以帮助我理解为什么我上面查询的两个概念之间存在差异吗?

编辑

我只是重新运行查询,现在我得到了第一个 DMV 的结果,它session_id实际上不包含在第二个结果集中。

sql-server sql-server-2008-r2
  • 3 个回答
  • 1233 Views
Martin Hope
swasheck
Asked: 2013-06-15 10:40:27 +0800 CST

这些快照隔离级别配置如何在 SQL Server 2005 实例上交互?

  • 6

我开始解决tempdb我们在 SQL Server 2005 Enterprise Edition 上遇到的问题。开发人员收到tempdb空间不足的错误。从技术上讲,错误是:

访问数据库“dbname”中表“dbo.inserted”中的版本化行时,事务中止。未找到请求的版本化行。您的 tempdb 可能空间不足。请参阅 BOL,了解如何配置 tempdb 进行版本控制

我查看了中的数据库配置sys.databases,发现以下设置:

snapshot_isolation_state: 0

snapshot_isolation_state_desc: OFF

is_read_committed_snapshot_on: 1

我查了一下这在BOL中的含义,主要信息如下:

snapshot_isolation_state

允许快照隔离事务的状态,由 ALLOW_SNAPSHOT_ISOLATION 选项设置:

0 = 快照隔离状态为关闭(默认)。不允许快照隔离。

1 = 快照隔离状态开启。允许快照隔离。

2 = 快照隔离状态正在转换到关闭状态。所有事务都有其修改版本。无法使用快照隔离启动新事务。数据库保持转换到 OFF 状态,直到所有在运行 ALTER DATABASE 时处于活动状态的事务都可以完成。

3 = 快照隔离状态正在转换到 ON 状态。新事务的修改版本化。在快照隔离状态变为 1 (ON) 之前,事务不能使用快照隔离。数据库保持转换到 ON 状态,直到所有在运行 ALTER DATABASE 时处于活动状态的更新事务都可以完成。

snapshot_isolation_state_desc

由 ALLOW_SNAPSHOT_ISOLATION 选项设置的允许快照隔离事务的状态描述:

  • 离开
  • 上
  • IN_TRANSITION_TO_ON
  • IN_TRANSITION_TO_OFF

is_read_committed_snapshot_on

1 = READ_COMMITTED_SNAPSHOT 选项为 ON。已提交读隔离级别下的读操作基于快照扫描,不获取锁。

0 = READ_COMMITTED_SNAPSHOT 选项为 OFF(默认)。已提交读隔离级别下的读操作使用共享锁。

如果我理解正确,snapshot_isolation_state则为 OFF 且不允许。但是,1is_read_committed_snapshot_on表示数据库正在使用快照隔离。如果不允许,这怎么可能?

sql-server sql-server-2005
  • 1 个回答
  • 5951 Views
Martin Hope
swasheck
Asked: 2013-05-01 13:38:13 +0800 CST

SQL Server 2000 和 SQL Server 2008 R2 OPTION (FAST 1) 之间是否存在行为变化?

  • 4

FAST这是与查询提示相关的 2 个问题中的第 2 个问题。背景信息(顺便说一句,我并不是想获得更多的代表,我只是想做到每个问题只问一个问题)。

我们的旧版 ERP 在 SQL Server 2000 EE 上运行,现在在 2008 R2 EE 上运行。我们注意到 2008R2 环境中有更多被阻止的命令。2008R2 环境正在运行,跟踪标志为 4199 和 1119。

我注意到2000 年) 中关于提示的 MSDN 文档与2008R2之间的差异,其中扩展了提示以注意一旦返回指定的行FAST,结果将继续被处理。n这只是一个更强大的文档,多年来这个提示的行为发生了变化,还是有什么不同?

sql-server sql-server-2008-r2
  • 1 个回答
  • 327 Views
Martin Hope
swasheck
Asked: 2013-05-01 13:28:14 +0800 CST

OPTION (FAST 1) 实际是如何与客户交互的?

  • 7

这是 2 个相关的问题 1OPTION (FAST 1);

我们刚刚将我们的 ERP 数据库从 SQL 2000 EE 升级到 2008 R2 EE,我们注意到数据库中的阻塞增加了。我已将其范围缩小到我认为是供应商代码中的违规声明,即:

SELECT MAX(column)
FROM [table] 
WHERE <condition> 
OPTION (FAST 1);

spid 留下一个打开的事务并在表上锁定,阻塞所有其他客户端。但是,调用客户端似乎不再与服务器交互以告诉服务器它已收到数据以结束会话。

阅读有关 Query Hints 的文档,我看到了这个声明

FAST number_rows

指定查询已针对第一个 number_rows 的快速检索进行了优化。这是一个非负整数。返回第一个 number_rows 后,查询继续执行并生成完整的结果集。

这让我想知道客户端是否以某种方式中断了通信,服务器是否会保持事务打开,在第一n行返回后处理完整的结果集并使事务保持打开状态?该流程是一个内部流程,因此我无法真正看到最终用户执行会话来执行此操作,而且这不是每次内部流程发生时都会发生的事情。但是,它只被内部进程使用。

阅读了Remus对 SO 的回答后,对于查询的简单性来说,这似乎有点过分了。查看查询,如果他们从未分组的人那里收到多个结果,MAX那么有些事情很可疑。

因此,当我准备与供应商合作时,我想知道是否可以开始准确地将我们的阻塞问题归结为正在使用此查询提示这一事实。

请随时编辑/请求编辑,因为我知道这实际上可能不清楚。

sql-server sql-server-2008-r2
  • 1 个回答
  • 5282 Views
Martin Hope
swasheck
Asked: 2013-04-30 07:36:52 +0800 CST

事务复制创建休眠的修复索引,但阻塞其他进程

  • 5

我刚刚将我的 ERP 数据库服务器从 SQL Server 2000 迁移到 SQL Server 2008 R2(均为企业版)并且迁移进行得相当顺利。

但是,现在我正在尝试重新创建从 ERP 到报告环境的复制,我有两个出版物正在尝试创建一系列MSFixupNonUniqueIndex_{{datetimestamp}}非唯一索引。创建这些索引的进程都在休眠,但它们正在阻塞最终用户正在运行的其他 SQL 进程。

是什么导致了这个修复索引的创建,我可以避免它吗?

  • 使用sp_whoisactivethere nowait_info来创建索引任务。
  • 我没有在报告环境中删除复制的数据库。
  • “报告环境”也是 SQL Server 2008 R2 Enterprise。
  • 现在是 2008 R2 到 2008 R2 的复制。
  • sysprocesses显示试图创建索引的 spid 阻止的两个过程。spid 本身有一个waittypeof0x0000和一个lastwaittypeof MISCELLANEOUS。
  • sys.locks显示有 777 个锁:7 个 Intent,761 个 Exclusive,6 个 Shared,2 个 Schema Mod,1 个 Schema Stability。资源是: 1 ALLOCATION_UNIT、 9 OBJECT、 3 DATABASE、 2 METADATA、 677 PAGE、 11 KEY、 1 HOBT、 73 EXTENT。
  • select * from sysprocesses where open_tran > 0确实通过一个打开的事务返回 spid
  • DBCC OPENTRAN没有未结交易。
  • MAXDOP未配置
sql-server sql-server-2008-r2
  • 2 个回答
  • 553 Views
Martin Hope
swasheck
Asked: 2013-04-18 09:32:34 +0800 CST

如何验证完整的数据库还原反映了 SQL Server 中的确切源数据库?

  • 7

我们正在停用旧的 SQL Server 2000 Ent。支持 SQL Server 2008 R2 Ent 的实例。我计划的迁移路径是:

  1. 终止客户端连接 (2000)
  2. 完整备份 (2000)
  3. 还原 (2008 R2)

我被要求提供确凿的证据,证明每笔交易都“成功”,并且数据是 2000 实例上存在的数据的精确复制。

我希望我可以使用以下文档作为证据:

  • 完整数据库备份
  • 执行完整的数据库还原(完整恢复模型)

但是,如果这还不够,我唯一能想到的就是遍历每个数据库的每个表的每一行并计算校验和(在两个实例上)以及获取每个数据库中每个表的行数。

有没有更好的方法来满足“精确副本”验证标准?我也愿意接受更好的文档。

sql-server restore
  • 3 个回答
  • 276 Views
Martin Hope
swasheck
Asked: 2013-02-06 15:56:40 +0800 CST

我应该对这个 NO JOIN PREDICATE 警告感到震惊吗?

  • 21

我正在对性能不佳的存储过程的点点滴滴进行故障排除。该过程的这一部分引发了 NO JOIN PREDICATE 警告

select
    method = 
        case methoddescription 
            when 'blah' then 'Ethylene Oxide'
            when NULL then 'N/A'
            else methoddescription
        end,
    testmethod = 
        case methoddescription 
            when 'blah' then 'Biological Indicators'
            when NULL then 'N/A'
            else 'Dosimeter Reports'
        end,
    result = 
        case when l.res is null or l.res <> 1 then 'Failed'
        else 'Passed'
        end,
    datecomplete = COALESCE(CONVERT(varchar(10), NULL, 101),'N/A')
from db2.dbo.view ls
    join db1.dbo.table l
        on ls.id = l.id
    where item = '19003'
        and l.id = '732820'

视图 ( [ls]) 调用远程服务器(计划右侧的远程查询 %41)。

这是该计划的图片:

计划

我只是因为这篇博文才问这个问题,我想确保以后不会再回来咬我。

sql-server sql-server-2008-r2
  • 1 个回答
  • 5975 Views
Martin Hope
swasheck
Asked: 2013-01-12 14:10:11 +0800 CST

SQL Server 中的“记录”和“行”有什么区别?

  • 65

有一个关于在 SQL Server 中添加日期和时间的相当无害的问题引发了一场相当引人入胜的分类辩论。

那么我们如何区分这些相关术语以及如何正确使用它们呢?

排

记录

sql-server terminology
  • 8 个回答
  • 40421 Views
Martin Hope
swasheck
Asked: 2013-01-04 15:07:49 +0800 CST

NVARCHAR 列上的相等查询在 SQL Server 2012 中产生多个结果

  • 8

我正在将一个宠物项目从 PostgreSQL (9.2.2) 迁移到 SQL Server (2012 Standard)。

在查询 unicode 单词时,我注意到一个有趣的现象。给定定义:

CREATE TABLE [word](
    [id] [int] IDENTITY(0,1) NOT NULL,
    [value] [nvarchar](255) NULL    
 );

和数据:

insert into word (value) values (N'ῥύπῳ');
insert into word  (value) values (N'ἀπὸ');
insert into word  (value) values (N'ἀπό');
insert into word (value) values  (N'ἐπὶ');
insert into word (value) values  (N'ἐπί');
insert into word (value) values  (N'ὑπὸ');
insert into word (value) values  (N'ὑπό');
insert into word (value) values  (N'πίῃ');

insert into word  (value) values (N'λόγους');
insert into word  (value) values (N'λόγχῃ');
insert into word (value) values  (N'λόγων');
insert into word  (value) values (N'ἀλόης');

对特定单词的查询将返回接近匹配项。例如:

select * from word where value = N'ἀπὸ'

回报:

id  value
102137  ῥύπῳ
102141  ἀπὸ
102142  ἀπό
102143  ἐπὶ
102144  ἐπί
102145  ὑπὸ
102146  ὑπό
102147  πίῃ

http://sqlfiddle.com/#!6/1ab66/1

但是,PostgreSQL 中的相同模式只返回完全匹配。我怎样才能让 SQL Server 做同样的事情?

(PostgreSQL 小提琴链接):http ://sqlfiddle.com/#!12/c57a6/1

我有一种明显的感觉,就是我错过了一些东西,但我不太清楚它是什么。

数据库排序规则SQL_Latin1_General_CP1_CI_AS(也是服务器的排序规则)在本地安装。

sql-server postgresql
  • 1 个回答
  • 1386 Views
Martin Hope
swasheck
Asked: 2012-12-22 10:34:12 +0800 CST

EXISTS 与 LEFT JOIN 查找投递地址的实际应用

  • 6

我们的最终用户可以通过多种方式将产品运送给我们的客户。他们可以使用一个表中的客户地址 ( [customer])、另一个表中的特定送货地址 ( [dropship]) 或另一个表中的另一个送货地址(对于有多个地点的客户) ( [delivery])。这些都具有大致相同的结构,对于相同的数据点具有相同的列名(例如[address]是所有表中的地址)。

目前,我们查找订单收货地址的逻辑如下:

SELECT
    Address = COALESCE(r.address, d.address, c.address) 
FROM [order] o 
JOIN customer c
    ON o.customerid = c.customerid
LEFT JOIN delivery d
    ON o.customerid = d.customerid
    AND o.delivaddressid = d.delivaddress
LEFT JOIN dropship r
    ON o.orderid = r.orderid;

基于对话而不是一些博客文章,EXISTS似乎是首选。

然而,这对我来说是一个新的范例,我正在努力思考它。我只是将LEFT JOINs替换为

WHERE EXISTS 
    (select 1 from delivery d
        where o.customerid = d.customerid 
        and o.delivaddressid = d.delivaddress)

这将不允许我使用来自的数据,[delivery]除非我将它扔到FROM子句中并创建笛卡尔积,对吧?

sql-server-2008-r2
  • 1 个回答
  • 237 Views
Martin Hope
swasheck
Asked: 2012-12-14 09:27:54 +0800 CST

从 LocalDB 解决方案到企业实例的迁移/部署路径是什么?

  • 7

鉴于SQL Server 2012 的 LocalDB的现存定义为

SqlLocalDB 是 SQL Server 2012(及未来版本)的本地低开销数据库引擎,它允许开发人员专注于开发而不是实例配置或安全性。

我很好奇从 LocalDB 中的开发到生产实例的路径会是什么样子,特别是考虑到用户实例(ca. SQL 2005)的问题,并试图将其中一个提升到生产中,开发人员会忘记哪个实例他们实际上是在努力推广。在StackOverflow上快速搜索可以发现各种形式的此类问题。在这种情况下,LocalDB 是否会改进/简化部署?

sql-server-2012 sql-server-localdb
  • 1 个回答
  • 1200 Views
Martin Hope
swasheck
Asked: 2012-10-20 12:00:28 +0800 CST

如何保留未嵌套数组中元素的原始顺序?

  • 24

给定字符串:

'我认为 PostgreSQL 很漂亮'

我想对该字符串中的单个单词进行操作。本质上,我有一个单独的,我可以从中获取单词详细信息,并希望在该字典中加入该字符串的未嵌套数组。

到目前为止,我有:

select word, meaning, partofspeech
from unnest(string_to_array('I think that PostgreSQL is nifty',' ')) as word
from table t
join dictionary d
on t.word = d.wordname;

这完成了我希望做的基本工作,但它不保留原始词序。

相关问题:
带有元素编号的 PostgreSQL unnest()

postgresql sorting
  • 1 个回答
  • 22207 Views
Martin Hope
swasheck
Asked: 2012-10-05 06:17:18 +0800 CST

用户以系统管理员身份通过 Excel 连接到 SQL Server 的潜在风险?

  • 8

我最近发现大部分财务部门正在使用 Excel 以系统管理员角色的帐户连接到我的 SQL Server 2000 实例。我应该立即与当权者沟通的当前风险是什么?

sql-server security
  • 4 个回答
  • 2190 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