如何获取数据库中所有分区表的列表?
我应该查看哪些系统表/DMV?
我们最近遇到了临界点问题,我们的一些报告查询过去需要在几秒钟内完成执行,现在需要超过 2 分钟,因为查询优化器只是忽略了搜索列上的非聚集索引。下面是一个示例查询:
select top 100 *
from [dbo].[t_Call]
where ID > 0
and throwtime between '3/20/2014 7:00:00 AM' and '3/24/2014 6:59:59 AM'
order by id
Run Code Online (Sandbox Code Playgroud)
该ID列是聚集索引并且Throwtime具有非聚集索引。在这种情况下,我们注意到 ordering bythrowtime而不是ID更改查询计划和非聚集索引被使用。我们还计划存档一些旧数据(它目前有 2000 万行!!)。但是在应用程序中进行这些更改需要一些时间,我需要找到一种方法来使报告运行得相当快,而无需在应用程序级别进行更改(哦,这就是生活!)。
进入计划指南。我使用非聚集索引查询提示创建了以下计划指南,但出于某种原因,仍未使用非聚集索引。我错过了什么吗?
EXEC sp_create_plan_guide
@name = N'[prod2reports_callthrowtime]',
@stmt = N'select top 100 *
from [dbo] . [t_Call]
where ID > @0 and @1 < = ThrowTime and ThrowTime < = @2 order by ID',
@type = N'SQL',
@module_or_batch = N'select …Run Code Online (Sandbox Code Playgroud) performance sql-server execution-plan plan-guides query-performance
这里有没有人在Azure 数据仓库数据库上创建和使用 UDF 很幸运?我正在将本地仓库从 SQL Server 2014 迁移到 Azure 数据仓库,但遇到了 UDF 问题。
CREATE FUNCTION dbo.fn_GetImpliedRate (@Multiple float, @term int)
RETURNS float
AS
BEGIN
DECLARE @ImpInt float
IF(@Term = 1)
SET @ImpInt = (select [1] from dbo.ImpliedRate where Multiple = @Multiple);
IF(@Term = 2)
SET @ImpInt = (select [2] from dbo.ImpliedRate where Multiple = @Multiple);
IF(@Term = 3)
SET @ImpInt = (select [3] from dbo.ImpliedRate where Multiple = @Multiple);
IF(@Term = 4)
SET @ImpInt = (select [4] from dbo.ImpliedRate …Run Code Online (Sandbox Code Playgroud) 我们目前有一个 SSIS 包,每晚导出大约 70 个大表,并在目的地进行截断和加载。我们的表格不断变化,我们有时会添加一些表格并删除一些表格,因此相应地编辑 SSIS 包很累人。
有没有办法让一个文本文件或一个包含表名列表的表,并有一个 SSIS 包来循环表并执行导出?这样,可以更轻松地处理导出的表的动态列表。
任何链接,指针表示赞赏。
我什至不确定我是否正确地提出了这个问题,但我会尝试 - 我有一堆从 Linux 系统上的 Oracle 导出生成的巨大文本文件。每个文件大小约为 30 GB,我有大约 50 个。
目标是将此数据导出到 Azure SQL 数据仓库。在这种情况下,考虑到数据的大小,BCP 不是正确的方法,所以我不得不使用 Polybase。
从 ASCII 转换为 UTF8 编码后,我在查询外部表时遇到了问题。Polybase 不能很好地处理固定宽度的文本文件,每行都有一个换行符。
文本文件看起来像这样:
101,102,103,104,105,106,107 108,108,109,110,111,112,113 114,115,116,117,118,119,120 121,122,123 --这里什么都没有,只是一个空行 201、202、203、204、205、206、207 208,209,210,211,212,213,214 215,216,217
Polybase 尝试从 101 到 107 进行处理,并且出现错误,抱怨此文件中没有足够的列可供处理。
这是我认为正在发生的事情:固定宽度和换行符使其将换行符视为行分隔符。
如何将此文件转换为如下所示:
101,102,103,104,105,106,107,108,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123{CR}
201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217{CR}{LF}
编辑:这是来自文件的示例数据。我在 Windows VM 上用 git bash 打开它。
这些文件应该有 167 列,,作为列分隔符。问题是,由于每行产生多行,因此很难从 Polybase 外部表处理它们。
我有一个存储过程,它作为报告数据库每晚刷新的一部分运行,大约需要 2 个小时才能完成。该对象B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP_T2有 800 万行。您能否建议我如何将此光标转换为基于集合的方法以获得更好的性能?可以使用 CTE 吗?
ALTER PROCEDURE [dbo].[B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP2_SP] AS
SET NOCOUNT ON
DECLARE @SEQ SMALLINT,
@CASEID DECIMAL,
@ASSIGNED NCHAR(30),
@AUDITSTAMP DATETIME,
@AUDITOPRID NCHAR(60),
@STATUS NCHAR(10),
@LASTCASEID DECIMAL,
@PROVGRPID NCHAR(20)
SET @SEQ = 1
SET @LASTCASEID = @CASEID
DROP TABLE B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP
CREATE TABLE B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP (
SEQ_NUM SMALLINT,
CASE_ID DECIMAL,
ASSIGNED_TO NCHAR(30),
AUDIT_STAMP DATETIME,
AUDIT_OPRID NCHAR(60),
RC_STATUS NCHAR(10),
PROVIDER_GRP_ID NCHAR(20) )
DECLARE AUDIT CURSOR FOR
SELECT CASE_ID, ASSIGNED_TO, AUDIT_STAMP, AUDIT_OPRID, RC_STATUS, PROVIDER_GRP_ID
FROM B_RPT_RC_AUDIT_ASSIGNED_TO_TEMP_T2
-- Open the cursor …Run Code Online (Sandbox Code Playgroud) sql-server ×5
etl ×1
functions ×1
import ×1
metadata ×1
partitioning ×1
performance ×1
plan-guides ×1
polybase ×1
ssis ×1
t-sql ×1