我在 SQL Asure 服务器上有一个表,除了集群之外没有索引。我在这个表中插入了大约 1000 行的少量数据,这需要 4 多分钟。虽然,当我用 SSIS 做这件事时,它只需要一秒钟。这是查询:
INSERT INTO DatabaseName.dbo.tmpOurClients
(KodClient,Name ,ShortName,INN,Boss,contact,Email,Adres,Tel,City_ID,DateLop)
SELECT KodClient,Name ,ShortName,INN,Boss,contact,Email,Adres,Tel,City_ID,DateLop
FROM dbo.OurClients
Run Code Online (Sandbox Code Playgroud)
这就是我创建链接服务器的方式:
EXEC sp_addlinkedserver
@server='Azure',
@srvproduct='',
@provider='sqlncli',
@datasrc='ServerName.DATABASE.WINDOWS.NET',
@location='',
@provstr='',
@catalog='db_name'
EXEC sp_addlinkedsrvlogin
@rmtsrvname='Azure',
@useself='false',
@rmtuser='login@server_name.database.windows.net',
@rmtpassword='password'
EXEC sp_serveroption 'Azure', 'Collation Compatible', true;
Run Code Online (Sandbox Code Playgroud)
我已经检查了这个主题Linked server to SQL Azure 非常慢,但没有任何建议对我有帮助。
本地 SQL Server 版本:Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) 2012 年 6 月 28 日 08:36:30 版权所有 (c) Microsoft Corporation Enterprise Edition(64 位),Windows NT 6.1(内部版本 7601) …
昨天,我们将 Azure 中的一个数据库从旧的商业版扩展到了新的标准版 (S2)。
从那以后,它的行为一直很不稳定。
我们有一个相对简单的表,称为 dbo.Asset。在它上面有一个名为 ContentSetId 的列,它是整数类型。此列也包含在索引中:
CREATE NONCLUSTERED INDEX [IX_Asset_ContentSet] ON [dbo].[Asset]
(
[ContentSetId] ASC
)
Run Code Online (Sandbox Code Playgroud)
该表包含大约 200 万条记录。
下面的查询第一次运行需要 36 秒,但后续运行需要 0 秒。我们在其他查询中也看到了类似的行为,它们可能需要一分钟以上的时间才能返回 1000 行以下,但随后的运行速度要快得多。
SELECT TOP 100 * FROM dbo.Asset WHERE ContentSetId = 3
Run Code Online (Sandbox Code Playgroud)
如上所述,自从从商业版更改为新标准 s2 以来,我们才注意到这种行为。
任何建议将非常受欢迎!
我有一个 Azure 数据库,并且在同一台服务器上创建了另一个数据库。之后,我创建了一个用户和一个相应的登录名(请参阅下面的脚本),目的是仅将其用于第二个数据库。运行我搜索过的脚本后(如下),第二个用户可以访问两个数据库。如何拒绝第二个用户访问第一个数据库?有DENY和REVOKE,否认特定权利,但我不清楚应该使用哪个。
额外问题:是否可以创建一个只能访问第二个数据库的用户?
IF NOT EXISTS (SELECT 1 FROM master.sys.databases WHERE ('[' + name + ']' = '[Elmah5]'))
CREATE DATABASE Elmah5;
GO
IF NOT EXISTS (SELECT 1 FROM sys.sql_logins WHERE name = 'ElmahAdmin')
CREATE LOGIN ElmahAdmin WITH PASSWORD = ''
GO
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = 'ElmahAdmin')
CREATE USER ElmahAdmin FOR LOGIN ElmahAdmin WITH DEFAULT_SCHEMA=[dbo]
GO
Run Code Online (Sandbox Code Playgroud)
将您当前的数据库切换到 MASTER(圈出,只需输入 MASTER 并按 ENTER)并运行
IF NOT EXISTS (SELECT 1 FROM master.sys.databases …Run Code Online (Sandbox Code Playgroud)我有一个 Azure 数据库的连接字符串。我希望 SSMS 中有一个地方可以插入该字符串并连接到它。或者,如果有一种方法可以使用 T-SQL 查询来做到这一点,那就更好了。
我注意到 Azure SQL 数据库上的这个等待统计信息,我以前从未见过。我试过在谷歌上搜索这个等待统计数据,但没有找到关于它是什么的任何好的信息,尽管我看到一些提到它可能与超过为数据库设置的 Azure 性能层有关。
我有一个分区表和分区消除问题。
我的表很简单,看起来像这样:
CREATE TABLE [data].[OperationData](
[DataLoggerID] [bigint] NOT NULL,
[End] [datetime2](7) NOT NULL
CONSTRAINT [PK_OperationData] PRIMARY KEY CLUSTERED
(
[DataLoggerID] ASC,
[End] ASC
))
Run Code Online (Sandbox Code Playgroud)
该表[End]按日期按列进行分区。
我执行一个简单的查询以逐[End]列查找最新的行。
SELECT TOP(1)
[OperationData].[DataLoggerID],
[OperationData].[End]
FROM [data].[OperationData]
WHERE [OperationData].[DataLoggerID] = 30217
ORDER BY [OperationData].[End] DESC
Run Code Online (Sandbox Code Playgroud)
问题是执行计划显示所有分区都被搜索过了,没有发生分区消除。
此查询是否可以消除分区?当是的时候为什么不使用它?
我无法将计划粘贴到“粘贴计划”上(显示错误),因此我将其复制到此处。
<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.520" Build="15.0.400.390" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1" StatementOptmLevel="FULL" CardinalityEstimationModelVersion="130" StatementSubTreeCost="26.2112" StatementText="SELECT TOP(1)
 [OperationData].[DataLoggerID],
 [OperationData].[End]
FROM [data].[OperationData] AS [OperationData] 
WHERE [OperationData].[DataLoggerID] = …Run Code Online (Sandbox Code Playgroud) 我正在尝试微调我的查询和存储过程。我面临的问题是无法清除 Azure 中的数据库缓冲区。这意味着我不能DBCC DROPCLEANBUFFERS在 Azure 上使用。
是否有一些解决方法可以清理缓冲区,以便我可以测试存储过程的实际时间?我正在考虑减少页面的预期寿命(尽管我不确定我是否真的能做到)。
我尝试更改数据库的层,因为在一篇文章中提到它可能会清除缓冲区,但它没有任何效果。
我需要这个,因为本地机器(带有 8 GB ram 的 I5)太快了,并且在本地机器上执行需要一秒钟的查询在 Azure S2(20 DTU)SQL DB 上需要大约 30 - 40 秒。
我正在尝试有条件地执行一个ALTER TABLE命令(准确地说是这个)。但是,我无法将其ADD PERIOD设为有条件的,我怀疑这可能是一个错误。
如果PERIOD表中已经存在,这是我尝试跳过执行的内容。所有这些都会引发相同的错误:
消息 13597,级别 16,状态 2,第 xx 行
临时 SYSTEM_TIME 时间段已在表 'msdb.dbo.sysjobhistory' 上定义。
仅在PERIOD当前不存在时添加:
if not exists(select 1 from sys.periods where object_id = OBJECT_ID('sysjobhistory'))
ALTER TABLE [dbo].[sysjobhistory]
ADD PERIOD FOR SYSTEM_TIME (StartTime, EndTime)
Run Code Online (Sandbox Code Playgroud)
这引发了错误。
由于上述方法不起作用,我想确保我的IF语句正确评估,所以我尝试了:
if 1=2
ALTER TABLE [dbo].[sysjobhistory]
ADD PERIOD FOR SYSTEM_TIME (StartTime, EndTime)
Run Code Online (Sandbox Code Playgroud)
但这也引发了错误。
使用SET NOEXEC ON到的代码停止执行:
set noexec ON
ALTER TABLE [dbo].[sysjobhistory]
ADD PERIOD FOR SYSTEM_TIME (StartTime, EndTime) …Run Code Online (Sandbox Code Playgroud)我刚刚从 BrentOzar.com 下载了 FirstResponderKit 的最新版本 (20190128),并尝试将其安装在 Azure SQL DB 上。我收到这些错误:
Msg 40515, Level 15, State 1, Procedure sp_AllNightLog, Line 16 [Batch Start Line 13]
Reference to database and/or server name in 'master.sys.procedures' is not supported in this version of SQL Server.
Msg 40515, Level 15, State 1, Procedure sp_AllNightLog_Setup, Line 16 [Batch Start Line 1492]
Reference to database and/or server name in 'master.sys.procedures' is not supported in this version of SQL Server.
Msg 40515, Level 15, State 1, Procedure sp_Blitz, …Run Code Online (Sandbox Code Playgroud) 我正在考虑将数据库从自托管集群迁移到 Microsoft Azure SQL。我知道涉及到一些分布式事务,Azure SQL 不支持这些事务。
有没有一种方法可以记录所有分布式事务及其查询,以便我可以检查客户端应用程序并消除对分布式事务的要求?