标签: azure-sql-database

通过链接服务器插入到 SQL Azure 非常慢

我在 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) …

sql-server linked-server azure-sql-database

4
推荐指数
1
解决办法
5281
查看次数

扩展到新版本后 SQL Azure 性能急剧下降

昨天,我们将 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 以来,我们才注意到这种行为。

任何建议将非常受欢迎!

performance azure-sql-database query-performance

4
推荐指数
1
解决办法
8248
查看次数

如何为 Azure 中的第二个数据库创建第二个登录?如何拒绝用户访问其中一个数据库?

我有一个 Azure 数据库,并且在同一台服务器上创建了另一个数据库。之后,我创建了一个用户和一个相应的登录名(请参阅下面的脚本),目的是仅将其用于第二个数据库。运行我搜索过的脚本后(如下),第二个用户可以访问两个数据库。如何拒绝第二个用户访问第一个数据库?有DENYREVOKE,否认特定权利,但我不清楚应该使用哪个。

额外问题:是否可以创建一个只能访问第二个数据库的用户?

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)

在此处输入图片说明


应该怎么做

  1. 使用您的主帐户连接。
  2. 将您当前的数据库切换到 MASTER(圈出,只需输入 MASTER 并按 ENTER)并运行

    IF NOT EXISTS (SELECT 1 FROM master.sys.databases …
    Run Code Online (Sandbox Code Playgroud)

sql-server azure-sql-database

4
推荐指数
1
解决办法
88
查看次数

使用连接字符串从 SSMS 连接到 Azure 数据库?

我有一个 Azure 数据库的连接字符串。我希望 SSMS 中有一个地方可以插入该字符串并连接到它。或者,如果有一种方法可以使用 T-SQL 查询来做到这一点,那就更好了。

ssms azure-sql-database connectivity

4
推荐指数
1
解决办法
3182
查看次数

LOG_RATE_GOVERNOR 等待统计

我注意到 Azure SQL 数据库上的这个等待统计信息,我以前从未见过。我试过在谷歌上搜索这个等待统计数据,但没有找到关于它是什么的任何好的信息,尽管我看到一些提到它可能与超过为数据库设置的 Azure 性能层有关。

azure-sql-database

4
推荐指数
1
解决办法
2099
查看次数

按顺序消除分区

我有一个分区表和分区消除问题。

设置

我的表很简单,看起来像这样:

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)&#xD;&#xA;    [OperationData].[DataLoggerID],&#xD;&#xA;   [OperationData].[End]&#xD;&#xA;FROM [data].[OperationData] AS [OperationData]  &#xD;&#xA;WHERE [OperationData].[DataLoggerID] = …
Run Code Online (Sandbox Code Playgroud)

sql-server partitioning azure-sql-database

4
推荐指数
1
解决办法
200
查看次数

如何清除 Azure 上托管的 SQL Server DB 的缓冲区?

我正在尝试微调我的查询和存储过程。我面临的问题是无法清除 Azure 中的数据库缓冲区。这意味着我不能DBCC DROPCLEANBUFFERS在 Azure 上使用。

是否有一些解决方法可以清理缓冲区,以便我可以测试存储过程的实际时间?我正在考虑减少页面的预期寿命(尽管我不确定我是否真的能做到)。

我尝试更改数据库的层,因为在一篇文章中提到它可能会清除缓冲区,但它没有任何效果。

我需要这个,因为本地机器(带有 8 GB ram 的 I5)太快了,并且在本地机器上执行需要一秒钟的查询在 Azure S2(20 DTU)SQL DB 上需要大约 30 - 40 秒。

sql-server azure-sql-database azure

4
推荐指数
1
解决办法
780
查看次数

无法停止“ADD PERIOD”的执行

我正在尝试有条件地执行一个ALTER TABLE命令(准确地说是这个)。但是,我无法将其ADD PERIOD设为有条件的,我怀疑这可能是一个错误。

如果PERIOD表中已经存在,这是我尝试跳过执行的内容。所有这些都会引发相同的错误:

消息 13597,级别 16,状态 2,第 xx 行

临时 SYSTEM_TIME 时间段已在表 'msdb.dbo.sysjobhistory' 上定义。

  1. 仅在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)

    这引发了错误。

  2. 由于上述方法不起作用,我想确保我的IF语句正确评估,所以我尝试了:

    if 1=2
        ALTER TABLE [dbo].[sysjobhistory]
        ADD PERIOD FOR SYSTEM_TIME (StartTime, EndTime)
    
    Run Code Online (Sandbox Code Playgroud)

    但这也引发了错误。

  3. 使用SET NOEXEC ON的代码停止执行

    set noexec ON
        ALTER TABLE [dbo].[sysjobhistory]
        ADD PERIOD FOR SYSTEM_TIME (StartTime, EndTime) …
    Run Code Online (Sandbox Code Playgroud)

sql-server azure-sql-database

4
推荐指数
1
解决办法
289
查看次数

在 Azure SQL DB 中安装 FirstResponderKit?

我刚刚从 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)

azure-sql-database sp-blitz sp-blitzfirst

4
推荐指数
1
解决办法
959
查看次数

如何记录 MS SQL 服务器上的分布式事务中的查询?

我正在考虑将数据库从自托管集群迁移到 Microsoft Azure SQL。我知道涉及到一些分布式事务,Azure SQL 不支持这些事务。

有没有一种方法可以记录所有分布式事务及其查询,以便我可以检查客户端应用程序并消除对分布式事务的要求?

sql-server azure-sql-database distributed-transactions

4
推荐指数
1
解决办法
1187
查看次数