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

MichaelD's questions

Martin Hope
MichaelD
Asked: 2025-01-08 00:28:42 +0800 CST

当索引可用时,Updlock 不会锁定它接触的实际记录

  • 6
该问题已从 Stack Overflow迁移,因为它可以在数据库管理员 Stack Exchange 上找到答案。2 天前迁移 。

我们在一些 select 语句中使用 updlock 来确保只有一个连接可以读取数据。如果 SQL Server 可以从索引中获取所有数据,而另一个发出 updlock 的查询可以用另一个(非)聚集索引来满足,那么这似乎不起作用。

即使其他查询可以通过索引中的数据来满足,推荐的锁方法是什么?

例如,conn2 应该被阻塞直到 conn1 提交/回滚:

create database TestDB
go
use TestDB
go

create table LockTest(
    LockTestID int not null identity(1,1) primary key,
    Number int
)

create index IX_LockTest on LockTest(Number)

insert into LockTest(Number) values(1)


--Conn1
begin tran
select LockTestID from LockTest with(updlock) where LockTestID=1


--Conn2 -- The expectation here is, that this query waits untill Conn1 has committed
begin tran
select LockTestID from LockTest with(updlock) where Number=1

使用 holdlock 或 lock 可获得相同结果

sql-server
  • 1 个回答
  • 62 Views
Martin Hope
MichaelD
Asked: 2023-05-02 21:30:10 +0800 CST

是否有选项或提示可以提高“in”子句中具有多个值的查询的性能

  • 11

我们有一张 CustomerNote 表,其中包含 4 列 ID、CustomerID、Note、Date

CustomerID asc 上有一个索引,Date desc

当执行以下查询时

select top 30 
    Date 
from CustomerNote
where CustomerID in (1,5)
order by Date desc

使用了索引,但它仍在为 customerID 的 1 和 5 获取所有 CustomerNotes,然后进行排序/置顶,导致大量 CPU 使用率。 在此处输入图像描述

这是由于“in”子句中的多个值。我知道“in”子句的值永远不会超过 10,因此如果 sql server 迭代 10,每个 customerID 至少获取 30 个,然后进行合并、排序和排序,这将是一个更好的方法。是否有查询提示或选项来实现此目的?

sql-server
  • 3 个回答
  • 1072 Views
Martin Hope
MichaelD
Asked: 2021-12-02 23:01:05 +0800 CST

添加列时环境之间的性能差异

  • 2

我们有 2 个完全相同的数据库环境。第二个环境包含生产数据库的副本,并在 Invoice 表中托管大约 11M 条记录。此环境的目标用于查看特定升级查询需要多长时间才能知道是否会有任何停机时间(因为表在架构更改期间被锁定)

在第二个环境中执行 add 语句时

alter table Invoice add IsVerified bit not null default(0)

查询立即退出,这很奇怪,因为其中有 11M 条记录。我预计至少会有一点延迟。即使是选择计数(*)也需要更长的时间。然而,在主生产数据库上,它需要更长的时间,超过 30 秒,因此我们必须将此查询计划到一个特殊的维护窗口中。在执行查询时,没有任何东西阻塞 SPID(使用 sp_who2 检查)

可能是什么原因,数据库的第二个副本似乎根本没有努力在 11M 记录数据库中添加一列,而另一个 maindb 无法及时完成(<30 秒)。也许一些特殊设置允许您添加一个默认值列而不需要写入所有记录?难道是因为我们的测试环境是开发版,而生产环境是标准版?也许开发版中的某些特殊功能在 SQLStandard 中不可用?

select count(*) from Invoice //result: 11701200
SQL Server Execution Times:
   CPU time = 2375 ms,  elapsed time = 608 ms.

要添加的脚本:

alter table Invoice add IsVerified bit not null default(0)
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 12 ms.
sql-server performance
  • 1 个回答
  • 203 Views
Martin Hope
MichaelD
Asked: 2021-08-11 00:07:47 +0800 CST

高可用性主节点在重新联机时不会自动担任次要角色

  • 1

设置:

  • 基本高可用性

  • 2 个副本(1 个主副本,1 个辅助副本)。

    DB01 => 初始初级。

    DB02 => 初始二级

  • 两者同步提交

  • 两者都处于同步状态

  • 没有配置监听器

  • 集群类型 无

当我们使用 services.msc(模拟友好的服务器崩溃)停止 DB01(初始和当前主)SQL 服务,然后使用以下命令在 DB02(初始和当前辅助)上启动强制故障转移时:

ALTER AVAILABILITY GROUP [TestHA] FORCE_FAILOVER_ALLOW_DATA_LOSS;

辅助数据库上线,这是我们想要的。

但是,当使用 services.msc 再次启动 DB01 SQL Server 服务时,DB01 db 再次承担主要角色。

所以目前有 2 个实例可读/可写且不同步。我们期望初始主节点会检测到辅助节点已担任主要角色并承担次要角色,或者至少无法访问,因此应用程序无法处理旧数据。

相同的过程,但使用已弃用的镜像设置,确实会以这种方式运行。

sql-server failover
  • 1 个回答
  • 170 Views
Martin Hope
MichaelD
Asked: 2021-05-31 01:00:17 +0800 CST

如果数据库表大小为 3TB,读取速度为 10mbyte/sec。这是否意味着创建新索引需要 83 小时?

  • 2

我们的其中一个自定义日志表大小为 3TB。我们需要创建一个新索引。磁盘本身的读取速度为 10mbyte/sec。

这是否意味着索引创建过程将是 3.000.000/10 = 86 小时?索引被写入快速磁盘上的另一个文件组,因此写入时间不是一个因素。

sql-server performance
  • 1 个回答
  • 119 Views
Martin Hope
MichaelD
Asked: 2020-09-26 03:12:18 +0800 CST

如何从 sql profiler 捕获仅用于过滤查询的执行计划

  • 0

使用 sql profiler,我们跟踪所有慢查询(过滤持续时间/读取)以查看我们可以优化的地方。使用的事件:

  • RPC:已完成
  • SQL:批处理完成

按持续时间过滤。

如果我添加事件 ShowPlan XML,那么我将无法过滤基础查询的持续时间,从而在每秒有成百上千的查询到达时产生巨大的负载

如何仅捕获与过滤器持续时间/从其他事件中捕获的查询的读取匹配的条目的执行计划?

sql-server performance
  • 1 个回答
  • 372 Views
Martin Hope
MichaelD
Asked: 2020-09-02 00:00:11 +0800 CST

配置索引时查询需要很长时间才能执行

  • 1

我们有一个包含 190M 记录的表。在一个相当独特的列上有一个索引,但是,如果我在选择前 10 名的表上运行查询,其中只有 where 和 select 子句中的索引列,它仍然需要很长时间才能完成。

如果我打开实时查询计划 sql server 会显示“等待查询计划”等待微调器。如果查询最终完成,如果我再次运行它,它会立即完成。即使我之前运行 DBCC FREEPROCCACHE 所以感觉就像创建查询计划一直在占用,但是我无法通过在查询之前运行 DBCC FREEPROCCACHE 来重现。一段时间后,同样的问题将再次发生。

在此处输入图像描述

注意:数据库有 2 个文件组。索引和系统数据库存储在 SSD 磁盘上,而普通表数据存储在非 SSD 磁盘上。

sql-server sql-server-2016
  • 1 个回答
  • 494 Views
Martin Hope
MichaelD
Asked: 2014-02-28 12:07:31 +0800 CST

未使用空间索引

  • 5

我有一个带geometry列的表。对于一条记录,只Point存储一条。已创建空间索引,但搜索最近位置的查询不使用此索引,导致性能不佳。

示例脚本:

--Create the table
create table Location(
    LocationID int not null identity(1,1) primary key,
    LocationPoint geometry
)


--add records
declare @counter int =0
WHILE @counter<150000
BEGIN
    set nocount on
    --select 
    set @counter =@counter +1
    declare @RandomLocation geometry=geometry::Point(RAND() *1000, RAND() *1000, 0)     
    insert into Location(LocationPoint) values  (@RandomLocation)   
END

--create index
CREATE SPATIAL INDEX SPATIAL_StructureBE ON dbo.Location(LocationPoint)
USING GEOMETRY_GRID WITH ( 
    BOUNDING_BOX  = (xmin  = 0.0, ymin  = 0.0, xmax  = 1000, ymax  = 1000), 
    GRIDS = ( LEVEL_1  = MEDIUM, LEVEL_2  = MEDIUM, LEVEL_3  = MEDIUM, LEVEL_4  = MEDIUM),
    CELLS_PER_OBJECT  = 16, 
    STATISTICS_NORECOMPUTE = OFF, 
    ALLOW_ROW_LOCKS = ON, 
    ALLOW_PAGE_LOCKS = ON)

--Search, this query should use the index but it doesn't
declare @CurrentLocation geometry=geometry::Point(24,50, 0)
select top 1 *
from Location 
order by LocationPoint.STDistance(@CurrentLocation) asc
sql-server index
  • 2 个回答
  • 1561 Views
Martin Hope
MichaelD
Asked: 2013-05-31 02:09:32 +0800 CST

SQL Server 完整安全镜像提交开销小于发送时间?

  • 2

发送值的时间怎么可能大于镜像提交开销?镜像在完全安全的情况下运行,因此这意味着只有在提交成功@mirror 时才完成@principal 的提交。当发送时间为 2 秒时,这应该意味着开销至少为 2 秒。或者我错过了什么?

在此处输入图像描述

sql-server sql-server-2008
  • 1 个回答
  • 612 Views
Martin Hope
MichaelD
Asked: 2011-09-28 06:16:34 +0800 CST

删除域后的镜像问题

  • 6

我成功地在两台服务器之间创建了一个带有证书的镜像。其中一台服务器是域控制器。删除域后,镜像被中断。经过数小时的搜索,我重新安装了 SQL Server,希望所有可能的域删除问题都会消失,但镜像仍然无法工作。我不断收到模糊的错误:

Msg 1418, Level 16, State 1, Line 1 服务器网络地址“TCP://...”无法访问或不存在。检查网络地址名称以及本地和远程端点的端口是否可操作。

如果我检查镜像服务器的事件日志,我会看到 2 个错误:

  1. 加密操作失败。此错误表明 SQL Server 存在严重问题。检查 SQL Server 错误日志和 Windows 事件日志以获取更多信息。
  2. Service Broker 或数据库镜像操作期间系统加密调用失败:系统错误“5(无法检索此错误的文本。原因:15105)”。

有什么想法/建议吗?

sql-server sql-server-2008
  • 1 个回答
  • 1715 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