我希望我的应用程序在所有数据库级别(服务器、数据库、列)使用相同的排序规则:Latin1_General_CI_AS 这是Dan Guzman推荐的具有一致排序规则并从一开始就获得排序规则配置的建议。
Azure SQL Server(服务器)的默认排序规则是SQL_Latin1_General_CP1_CI_AS。我想将其更改为Latin1_General_CI_AS。或者使用排序规则 Latin1_General_CI_AS创建一个新的 Azure Sql Server(服务器)。对于本地 SQL Server,这是可能的。
在2010年的SQL Azure 排序规则文档中声明...服务器和数据库排序规则不能在 SQL Azure 中配置...除此之外,我没有发现有用的东西。
如果我可以创建一个新的 Azure SQL Server(服务器),并且排序规则为 Latin1_General_CI_AS ,我会非常高兴。
是否有可能或存在解决方法?我真的很感激任何帮助。
我得到了一个合理的简单查询:
With RowsToDelete AS
(
SELECT TOP 500 Id
FROM ErrorReports
WHERE IncidentId = 611
)
DELETE FROM RowsToDelete
Run Code Online (Sandbox Code Playgroud)
但是,它没有完成。我已经尝试了几次。上次我等了 8 分钟才取消。
ErrorReports包含大约 22 000 行。ErrorReportOrigins差不多。
预计执行计划:
实际执行计划(对于top 10,需要 28 秒才能完成):
执行计划:https : //www.brentozar.com/pastetheplan/?id=S1jUXDruz
客户统计:
我试过的:
ErrorReportOrigins没有聚集索引 (id),只有一个 FK 到ErrorReports.Id. 我添加了一个 id 列(pk&identity)。ErrorReportOrigins第一个删除(使用相同的 CTE)。没有不同ORDER BY Id,我把它去掉看看有没有区别)我迷路了。为什么要花这么长时间?所有 SELECT 语句都很快。而且数据库并不是很大。该ErrorReports表是最大的一个。
(这是一个弹性池中的 SQL Azure DB)
更新
CREATE TABLE [dbo].[ErrorReports](
[Id] [int] IDENTITY(1,1) …Run Code Online (Sandbox Code Playgroud) 您应该多久更新一次统计数据?什么是“太少”?“太频繁”有多频繁?
答案是“这取决于”您的数据库、用户、数据等。
所以我试图在两个表中记录我们的统计数据随着时间的推移是什么样的。他们来了:
DROP TABLE /*IF EXISTS */ dbo.dm_db_stats_histogram
DROP TABLE /*IF EXISTS */ dbo.dm_db_stats_properties
go
CREATE TABLE dbo.dm_db_stats_properties(
dm_db_stats_propertiesID INT IDENTITY(1,1) NOT NULL constraint PK_dm_db_stats_properties PRIMARY KEY CLUSTERED,
DatabaseId INT NOT NULL,
object_id int NOT NULL,
stats_id int NOT NULL,
last_updated DATETIME2 NOT NULL,
rows BIGINT NOT NULL,
rows_sampled BIGINT NOT NULL,
steps int NOT NULL,
unfiltered_rows BIGINT NOT NULL,
modification_counter BIGINT NOT NULL,
persisted_sample_percent FLOAT NULL
, SampleDate DATETIME2 NOT NULL CONSTRAINT df_dm_db_stats_properties_SampleDate DEFAULT SYSUTCDATETIME()
)
GO
ALTER …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server statistics azure-sql-database sql-server-2017
对于本地 SQL Server,有 Express、Web、Standard 和 Enterprise 等版本。Azure SQL DB 中是否存在这些版本(或类似版本),尤其是 Express?
我的 Google-Fu 在这里失败了,可能是因为它不存在。
sql-server express-edition azure-sql-database sql-server-express
对于我的用例,我试图让这样的东西与 Azure 数据工厂(ADF)一起使用
但我也从理论的角度对这个问题感兴趣。是否可以在像 postgres 这样的普通 SQL 引擎中做这样的事情?
我想禁止基于此键插入: (non_unique_id, timestamp) 其中时间戳是该对的唯一值。
例如:
non_unique_id: 0cf6c19c14
timestamp: 1970-01-01 00:00:01
Run Code Online (Sandbox Code Playgroud)
插入前:
select non_unique_id, timestamp from tbl where non_unique_id = 0cf6c19c14;
0 results
Run Code Online (Sandbox Code Playgroud)
插入前:
select non_unique_id, timestamp from tbl where non_unique_id = 0cf6c19c14;
0cf6c19c14, 1970-01-01 00:00:01
0cf6c19c14, 1970-01-01 00:00:01
0cf6c19c14, 1970-01-01 00:00:01
...
Run Code Online (Sandbox Code Playgroud)
插入前:
select non_unique_id, timestamp from tbl where non_unique_id = 0cf6c19c14;
0cf6c19c14, 2038-01-19 03:14:05
0cf6c19c14, 2038-01-19 03:14:05
0cf6c19c14, 2038-01-19 03:14:05
... …Run Code Online (Sandbox Code Playgroud) 问题的快速背景:我们有一个应用程序,我们有许多为客户端运行的应用程序实例。虽然它们的版本可能略有不同,但它们基本上是相同的。
昨天,一位客户遇到了 SQL 超时问题。查看查询,我们发现某些表存在问题,并使用OUTER APPLY并重新编写它来规避该问题。
今天检查查询计划,我可以清楚地看到统计数据很糟糕,因为它预计大约有 250 万行,这是不正确的。我更新了统计数据,它已经解决了这个问题,现在预计有 30 行。
我的困惑来自于我检查其他客户数据库的查询计划时,统计信息似乎关闭,但是,查询在大约 1 秒内返回,而不是在所面临的问题中看到的 45 秒。
两个数据库都打开了自动统计。这是否表明问题数据库上的自动统计有问题?
在测试时,我确实清除了缓存,DBCC FREEPROCCACHE因此引擎每次都必须生成一个计划。但是,我没有在及时返回数据的数据库上执行此操作。
抱歉含糊不清,很遗憾,由于敏感信息,我无法分享查询计划。
目前,我们只运行自动统计更新(没有预定的统计/索引维护)。这会改变;数据库在某种程度上被忽视了。我还应该提到,这些数据库在 Azure 中。我不确定这是否会改变什么?
我正在尝试在弹性池内的 Azure SQL 数据库中执行以下(示例)批处理:
drop table if exists [dbo].[InsertTest];
create table [dbo].[InsertTest] (
[id] uniqueidentifier,
[filler] nvarchar(max)
);
insert into [dbo].[InsertTest] ([id], [filler])
select top 1000 newid(), replicate('X', 2048)
from [sys].[objects] as [T1]
cross join [sys].[objects] as [T2];
/* drop table if exists [dbo].[InsertTest]; */
Run Code Online (Sandbox Code Playgroud)
但该insert语句失败并显示错误消息:
Msg 1132, Level 16, State 1, Line 1
The elastic pool has reached its storage limit. The storage used for the elastic pool cannot exceed (51200) MBs.
Run Code Online (Sandbox Code Playgroud)
我试图通过运行查询来查看空间是否不足
select
[type_desc] as [file_type], …Run Code Online (Sandbox Code Playgroud) 我希望能够使用 TSQL 获取当前数据库所属的弹性池的名称,但我可以找到包含弹性列的唯一 DMV 是 sys.elastic_pool_resource_stats & 我在那里没有看到任何对数据库的引用。我还检查了 sys.databases,看看是否有一个额外的列被偷偷地藏在那里,但我什么也认不出来。
理想情况下,这应该像 @@servername 或 db_name() 一样工作(他们到底什么时候才能创建 server_name() 或 @@dbname 以便我们可以一致地编码?)
有谁知道合适的命令?
(顺便说一句,没有“弹性池”标签)
SQL Server 2019 带来了一个OPTIMIZE_FOR_SEQUENTIAL_KEY选项,据我所知,您在创建索引时指定或使用WITH关键字更改。
但是您如何检查该选项是否已针对给定索引打开?
在 Server 2019 中是否默认开启?还是蔚蓝?
我正在尝试删除 SQL Server 中的临时(系统版本控制)表。我用的是常规DROP TABLE语句。
DROP TABLE [schema].[table]
GO
Run Code Online (Sandbox Code Playgroud)
这引发了以下错误:
表“[database].[schema].[table]”上的删除表操作失败,因为它不是系统版本控制的时态表上支持的操作。
如何删除 SQL Server 中的时态表?