在管理工作室中单击“使数据库脱机”后,如果单击关闭,此消息将保持挂起并且不会关闭。
在管理工作室处理此类卡住工作的好方法是什么?你能通过活动监视器杀死他们吗?我应该寻求什么过程阻止这项工作通过并终止它?
我有这个查询,它过去需要几分钟才能运行,现在需要 6 秒,但它每天运行数千次,所以我想让它更快。
https://www.brentozar.com/pastetheplan/?id=SJMLjJOWm
似乎在此查询期间超过 99% 的 I/O 发生在一次聚集索引扫描上。
这正常吗?这个查询足以证明为它添加任何额外的索引是合理的,所以我想知道我是否在这里遗漏了一些明显的东西。
dbo.GROUP_CONCAT 函数来自这个 github 组装项目 https://github.com/orlando-colamatteo/ms-sql-server-group-concat-sqlclr
SpecsProd 表定义:
CREATE TABLE [dbo].[SpecsProd](
[ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[specsID_1] [int] NULL,
[specsID_2] [int] NULL,
[specID] [int] NOT NULL,
[productID] [int] NOT NULL,
[SpecValue_1] [varchar](1000) NULL,
[SpecValue_2] [varchar](1000) NULL,
[Flock] [bit] NULL,
[SpecValue_1a] [varchar](2000) NULL,
[SpecValue_2a] [varchar](2000) NULL,
CONSTRAINT [PK_SpecsProd] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = …
Run Code Online (Sandbox Code Playgroud) 目前,我正在将服务器从一家公司转移到另一家公司。
他们希望将 SQL Server 安装在服务器上,以便我们清除所有数据库、维护计划和作业。
我正在尝试删除一堆 SQL Server 代理作业,但即使它们被禁用,它们仍处于“空闲”模式,因此在尝试删除它们时会引发以下错误:
删除 Job 失败
job_name.Subplan_1
。(Microsoft.SqlServer.Smo
)执行 Transact-SQL 语句或批处理时发生异常。(
Microsoft.SqlServer.ConnectionInfo
)该
DELETE
语句与REFERENCE
约束冲突FK_subplan_job_id
。数据库“msdb”、表dbo.sysmaintplan_subplans
、列中发生冲突job_id
。该语句已终止。(Microsoft SQL Server,错误:547)
如何从作业中删除 IDLE 状态以便删除通过?
我已经安装了 SQL Server 2008R2 SP1 数据库,我正在尝试使用 2008R2 安装二进制文件对其进行修复。
在修复加载过程中,窗口突然关闭并给我这个错误信息,有谁知道该怎么办?到目前为止,我的搜索技巧让我一个人呆着。
我想使用聚合来构建一个简单的单维标量值 JSON 数组,如下面示例中的 LuckyNumbers 数组:
[{
"id": 1,
"name": "Josian",
"LuckyNumbers": [581, 777]
}, {
"id": 2,
"name": "Paul",
"LuckyNumbers": [123551, 5, 646464, 1345, 75, 76]
}, {
"id": 3,
"name": "Seasonique",
"LuckyNumbers": [1]
}]
Run Code Online (Sandbox Code Playgroud)
使用 Postgresql 12,您可以使用本机聚合函数(fiddle)来完成此操作
--Postgresql 12 schema
create table person ( Id int primary key, name varchar(20) );
insert into person values (1,'Josian'), (2,'Paul'), (3,'Seasonique');
create table LuckyNumbers (PersonId int references person(Id), LuckyNumber int);
insert into LuckyNumbers (PersonId, LuckyNumber) values (1,581), (1,777), (2,123551), (2,5), …
Run Code Online (Sandbox Code Playgroud) 使用 SQL*PLUS,我无法在行命令期间使用退格按钮擦除内容。
当我按下退格键时,它不是擦除而是写 ^H
有没有办法配置退格键使其按预期工作?
我网站的自动完成搜索功能搜索包含销售商品型号的 varchar 字段。
该字段可以包含 1 到 75 个字符的字符串,并且该表包含 400 000 行。我提出了一个仅从字符串开头搜索的查询,执行时间大约为 150-250 毫秒,这是可以接受的,但现在我的经理希望查询搜索任何子字符串,这会使查询速度慢 3-10 倍(大约 1000-2000 毫秒)。
我构建了一个 JS 小提琴,为您提供数据的示例以及两个查询的示例。
http://sqlfiddle.com/#!6/9efa3/2/0
表上已经有一些索引了。加速这个自动完成搜索字段的最佳实践是什么?(数据库版本为SQLSERVER 2008R2)
这是我正在处理的数据的一个简短示例:
CREATE TABLE [Products](
[productid] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[model] [nvarchar](75) NOT NULL
CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED
(
[productid] ASC
));
insert into products values ('UMPX1AA0011 danish e-315 woot');
insert into products values ('P27y719VC');
insert into products values ('VG2y439m-LED');
insert into products values ('UMUyX165AAB01');
insert into products values ('U28y79VF');
insert into products values …
Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2008-r2 string-searching query-performance
由于未知原因,我的 VARCHAR(1000) 列之一中的许多字符串都以不可见字符结尾。
declare @BrokenString varbinary(max)=0x6D0079002000620075006700670065006400200073007400720069006E00670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F003F00;
select cast(@BrokenString as nvarchar(max)) -- returns 'my bugged string'
select cast(@BrokenString as nvarchar(max)) + ' is bugged' -- still returns 'my bugged string' !
declare @BrokenStringTable table (Brokey nvarchar(max));
insert into @BrokenStringTable
select cast(@BrokenString as nvarchar(max));
select * from @BrokenStringTable for json auto;
Run Code Online (Sandbox Code Playgroud)
该select * from @BrokenStringTable for json auto;
语句的输出如下所示:
[{"Brokey":"my bugged string\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000??"}]
Run Code Online (Sandbox Code Playgroud)
如何检测表中哪些记录包含这些字符?似乎使用 charindex、where+like 和任何其他正常解决方案都不适用于这些。
我有一个 SQL Server 2008 R2 标准版数据库,我已为其配置了ROWS
(.mdf) 数据库文件自动增长功能ON
,并将最大大小设置为 10GB。
一段时间后,我收到一条警报,提示我的tempdb日志已填满驱动器。我认为我的数据库大小被限制在 9990MB 左右,无法进一步扩展。
这两件事可能有关联吗?无法扩展的数据库是否会将其事务存储在tempdb中?
当数据库ROWS
文件已满并且有人不断向其中添加数据时会发生什么?
数据来自SQL Server性能数据监控:
这个旧的 SQL Server 2000 实例有一个 14 Gb 的数据磁盘和一个 30 Gb 的备份磁盘。
即使它很旧,它仍然有大量用户进行交易,因此该服务器上唯一数据库的日志文件每天都会填满数据驱动器。
我想我会把它放在简单的恢复中并刷新事务日志,但我想知道它会产生什么影响。
如果没有 T-log,您就不能使用备份恢复到完整备份时间以外的任何其他时间点,对吗?在对数据库进行此类更改时,除此之外我应该注意哪些最重要的影响?当我不生成 t-log 时,除了丢失一天的数据(每天备份到磁带)之外,还有什么可能发生?
提前致谢
sql-server ×9
disk-space ×1
json ×1
oracle ×1
performance ×1
sqlplus ×1
ssms ×1
t-sql ×1
varchar ×1