我是 T-SQL 和 MSSQL 的新手,但需要将 Azure SQL 数据库从一台服务器复制到另一台服务器。
正如我在这里搜索的那样- 它可以通过CREATE DATABASE Database1_copy AS COPY OF server1.Database1;查询来完成,但在我的 Ubuntu Linux 上的 Vusial Studio 代码编辑器中使用vscode-mssql扩展名 - 我有一个错误:
消息 156,级别 15,状态 1,第 1 行:关键字“数据库”附近的语法不正确。
我的完整查询如下:
CREATE DATABASE Database1_copy AS COPY OF oldserver.database.windows.net.olddatabasenamehere;
Run Code Online (Sandbox Code Playgroud)
额外的谷歌搜索引导我找到相同的解决方案(这是我发现的另一个例子)。
我在这里做错了什么?
我知道即使是在 Azure 资源 (azure.microsoft.com) 上发布的第一个链接 - 它也不一定是 Azure SQL 的有效解决方案。
PS Idea 是自动将 DEV 环境推出(使用 ARM 模板)作为当前 Live 环境的副本,并创建数据库作为 Live 数据库的副本。
首先,抱歉标题太长。
我将示例减少到最少,以使其更清晰,因此不再有有意义的语义。
DBMS:Azure SQL 数据库 V12。
假设有下表:
CREATE TABLE [dbo].[MuchDataTable](
[SmallDateTimeColumn] [smalldatetime] NOT NULL
)
GO
CREATE CLUSTERED INDEX [IX_MuchDataTable_SmallDateTimeColumn] ON [MuchDataTable] ([SmallDateTimeColumn])
Run Code Online (Sandbox Code Playgroud)
现在我想获取特定于任意天数范围的聚合数据。由于该表包含很多行(超过 150 Mio。)我创建了一个索引视图,它基本上如下所示:
CREATE VIEW [dbo].[AggregatedDateView]
WITH SCHEMABINDING
AS
SELECT CONVERT(DATE, [SmallDateTimeColumn]) AS [DateColumn], COUNT_BIG(*) AS [Count]
FROM [dbo].[MuchDataTable]
GROUP BY CONVERT(DATE, [SmallDateTimeColumn])
GO
CREATE UNIQUE CLUSTERED INDEX [IX_AggregatedDateView_Date] ON [dbo].[AggregatedDateView] ([DateColumn])
Run Code Online (Sandbox Code Playgroud)
对于我的一天分组,我将每个都转换DateTime为Date. 然后我在视图上创建一个聚集索引。
对视图执行简单的 SELECT * 扫描视图的索引。没关系:
但是,如果我在计算日期列上使用 WHERE 约束进行查询,则会对原始表执行聚集索引查找:
我的理解是,应该有一个 B 树,其中包含索引视图的所有转换日期。SQL Server 为什么选择扫描底层表的聚集索引?这对索引视图是不可能的,我必须在触发器和普通表之上构建解决方案吗? …
我有两个表,它们在处理之前临时保存来自 Web 应用程序的上传数据。这是在 Azure SQL 数据库上运行的。
Id uniqueidentifier
CustomerId uniqueidentifier
FileName nvarchar(MAX) NULL
UploadDate datetime
UploadedBy nvarchar(MAX) NULL
Run Code Online (Sandbox Code Playgroud)
Id uniqueidentifier
Data varbinary(MAX) NULL
UploadFileId uniqueidentifier
[Index] int
Run Code Online (Sandbox Code Playgroud)
UploadFile有一个外键,级联删除到UploadFileChunk. UploadFileChunk在 上有一个非聚集索引UploadFileId。我一直在上传每个 1MB 的块。
插入和读取这些数据工作得很好,但是UploadFile在处理完数据后删除记录真的很慢。在 S0 10 DTU 测试 Azure 环境中,删除 12 条记录和大约 500 个子块总共需要 38 分钟(仅举个例子 - 它在我们的更高功率的生产环境和快速的本地机器上也表现不佳。)
我如何使它快速?
这里是一个索引UploadFileChunk.FileUploadId。这是执行计划。
我多次运行以下查询(来自在 SQL Azure 中查找阻塞查询),而慢速删除是在执行中,并且没有返回任何结果:
SELECT TOP 10
r.session_id,
r.plan_handle,
r.sql_handle,
r.request_id, …Run Code Online (Sandbox Code Playgroud) performance sql-server delete azure-sql-database query-performance
我正在设置从本地 SQL Server 到 MS Azure 上的数据库的链接服务器(见下文)。当非管理员用户通过链接服务器查询 Azure 数据库时,他们会得到:
Msg 7416, Level 16, State 2, Line 1 访问远程服务器被拒绝,因为不存在登录映射。
关于如何让这个工作的任何想法?
EXEC sp_addlinkedserver
@server='LincServer',
@srvproduct='',
@provider='sqlncli',
@datasrc='myAzureDB.database.windows.net',
@location='',
@provstr='Encrypt=Yes;TrustServerCertificate=No;User ID=myAzureID',
@catalog='MyDB'
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'LincServer',
@useself = 'false',
@rmtuser = 'myAzureID',
@rmtpassword = '########'
GO
Run Code Online (Sandbox Code Playgroud) 我很感激有关分区(或不分区)多租户业务应用程序的设计注意事项的意见。所有数据表都使用一个复合键,类似于:
CREATE TABLE SomeTable(
TenantId SMALLINT NOT NULL,
ID INT NOT NULL,
SomeData ...,
CONSTRAINT [PK_SomeTable] PRIMARY KEY CLUSTERED (TenantID, ID)
)
Run Code Online (Sandbox Code Playgroud)
几乎所有读取都以特定的租户 ID 为键。写入由租户 ID 随机输入,但 3-5 天内的任何数据在此之后往往永远不会改变。
database-design sql-server partitioning azure-sql-database multi-tenant
我有一个带有 . 作为分隔符,它看起来像这样......
abc.efg.hij
Run Code Online (Sandbox Code Playgroud)
我想要一个将其转换为三列 Col1、Col2 和 Col3 的查询。我想知道最快的方法是什么。到目前为止,由于我有限的数据库经验,我还没有做得很好。我有一个功能:
CREATE FUNCTION [dbo].[split](
@delimited NVARCHAR(MAX),
@delimiter NVARCHAR(100)
) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
AS
BEGIN
DECLARE @xml XML
SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'
INSERT INTO @t(val)
SELECT r.value('.','varchar(MAX)') as item
FROM @xml.nodes('/t') as records(r)
RETURN
END
Run Code Online (Sandbox Code Playgroud)
这就是我现在正在做的事情,但我相信它可以做得更快,我也愿意接受明显更好的功能或用于拆分字符串的开箱即用的想法。我相信我已经运行dbo.split(Name, '.')了三遍并且只能运行一次。
SELECT
Col1 = (SELECT Val from dbo.split(Name, '.') WHERE Id = '1'),
Col2 = (SELECT Val from dbo.split(Name, '.') WHERE Id = '2'),
Col3 = …Run Code Online (Sandbox Code Playgroud) performance sql-server azure-sql-database functions string query-performance
我有一个表,它有一个聚集索引,如下所示:
CREATE CLUSTERED INDEX [IX_MachineryId_DateRecorded]
ON Machinery (MachineryId, DateRecorded)
Run Code Online (Sandbox Code Playgroud)
我根据聚集索引中的字段进行选择,再加上一个:
SELECT DateRecorded, Latitude, Longitude
FROM MachineryReading
WHERE MachineryId = 2127 -- First key in the index
AND DateRecorded > '2017-01-10' -- Second key in the index
AND DateRecorded < '2017-10-16' -- Second key in the index
AND FixStatus >= 2 -- Not a key, resulting in a scan
ORDER BY DateRecorded
Run Code Online (Sandbox Code Playgroud)
我原以为这会导致一个简单的聚集索引扫描。但是,查看实时查询统计信息和实际执行计划,查询的大部分执行时间来自对索引扫描后的结果进行排序。为什么排序后的数据又被排序了?
我想对 Azure SQL 数据库进行一些性能测试。
对于 SQL Server,我读过DBCC DROPCLEANBUFFERS可用于清除数据缓冲区缓存,DBCC FREEPROCCACHE可用于清除执行计划缓存。
但 Azure SQL 数据库不支持这两种方法。对于执行计划缓存,ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE 似乎是一个替代方案。但是我找不到数据缓冲区缓存的替代方案。
如何清除 Azure SQL 数据库的数据缓冲区缓存?
我目前正处于 Azure SQL 数据库平台上新数据库的开发阶段。它不会在新的几个月上线。我正在使用各种标量值函数,其中一个是将 UTC 转换为在配置表中指定的本地日期,例如澳大利亚东部标准时间
该函数被调用如下:
SELECT
dbo.fnGetLocalDate(DateColumn) as DateColumn,
FROM
table
Run Code Online (Sandbox Code Playgroud)
有没有人对如何在这种情况下避免功能有任何建议?我发现它们对代码重用很有用,但我不确定如何在此处避免它。
我还想知道 vNext 是否可以解决 Azure 平台中函数的性能问题,我最好继续使用函数。
CREATE FUNCTION [dbo].[fnGetLocalDate]
(
@DateToConvert datetimeoffset = NULL
)
RETURNS datetimeoffset
AS
BEGIN
DECLARE @TimeZone varchar(50)
RETURN
CASE
WHEN @DateToConvert is NULL then NULL
ELSE
CONVERT(datetimeoffset, @DateToConvert AT TIME ZONE (SELECT Value FROM LookUp.Config WHERE Property = 'TimeZone'))
END
END
Run Code Online (Sandbox Code Playgroud) 我正在尝试对 Azure SQL 中的查询使用“数据库引擎优化顾问”。
根据https://docs.microsoft.com/en-us/sql/relational-databases/performance/start-and-use-the-database-engine-tuning-advisor它应该适用于 Azure SQL。
但是它给了我“无法打开新连接”。
附加信息:数据库引擎优化顾问不支持 Microsoft Azure SQL 数据库。(DTA客户端)
这是正确的吗?我在 MSDN 论坛上找到了一个帖子(2016 年 12 月询问) ,确认 Tuning Advisor 在Microsoft® SQL Server® 2016 Service Pack 1 (SP1) 中与 Azure 一起使用
我正在使用的 Sql Server Management Studio v17.3(数据库引擎优化顾问 14.0.1000.169)是否仍然支持它?我应该怎么做才能启用它?
我已经尝试过 Azure Performance Insights,但它不允许我获得我必须分析的单个查询的索引建议。
sql-server ×8
performance ×2
azure ×1
delete ×1
functions ×1
index-tuning ×1
multi-tenant ×1
partitioning ×1
string ×1
t-sql ×1