AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-2374

Mark Storey-Smith's questions

Martin Hope
Mark Storey-Smith
Asked: 2024-08-27 22:21:13 +0800 CST

DATEDIFF 舍入

  • 12

实施旋转分区方案,请参阅kejser.org/table-pattern-rotating-log-ring-。遇到 DATEDIFF 四舍五入值的问题:

DECLARE @Partitions INT = 15;

SELECT
    a1.dt
    , dtTrunc 
    , dtDiff
    , PartitionKey = CAST(DATEDIFF(DAY, 0, dtDiff) % @Partitions AS TINYINT)
FROM
    (
    VALUES
        ('2024-08-17 23:59:59.997')
        , ('2024-08-17 23:59:59.998')
        , ('2024-08-17 23:59:59.999')
        , ('2024-08-18 00:00:00.000')
    )
    AS v(dt)
CROSS APPLY
    (
    SELECT
        dt = CAST(v.dt AS DATETIME2(3))
    ) a1
CROSS APPLY
    (
    SELECT
        dtTrunc = CAST(a1.dt AS DATE)
        , dtDiff = DATEDIFF(day, 0, a1.dt)
    ) a2

查询 1 输出

迄今为止已解决的问题:

DECLARE @Partitions INT = 15;

SELECT
    a1.dt
    , dtTrunc 
    , dtDiff
    , PartitionKey = CAST(DATEDIFF(DAY, 0, dtDiff) % @Partitions AS TINYINT)
FROM
    (
    VALUES
        ('2024-08-17 23:59:59.997')
        , ('2024-08-17 23:59:59.998')
        , ('2024-08-17 23:59:59.999')
        , ('2024-08-18 00:00:00.000')
    )
    AS v(dt)
CROSS APPLY
    (
    SELECT
        dt = CAST(v.dt AS DATETIME2(3))
    ) a1
CROSS APPLY
    (
    SELECT
        dtTrunc = CAST(a1.dt AS DATE)
        , dtDiff = DATEDIFF(day, 0, CAST(a1.dt AS DATE))
    ) a2

查询 2 输出

这是预期/记录的行为吗?如果是,在哪里?

sql-server
  • 2 个回答
  • 693 Views
Martin Hope
Mark Storey-Smith
Asked: 2011-10-26 15:22:42 +0800 CST

并行计划中的“实际”行数不准确

  • 17

这是一个纯粹的学术问题,它不会引起问题,我只是想听听对这种行为的任何解释。

以标准问题 Itzik Ben-Gan 交叉连接 CTE 计数表为例:

USE [master]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[TallyTable] 
(   
    @N INT
)
RETURNS TABLE WITH SCHEMABINDING AS
RETURN 
(
    WITH 
    E1(N) AS 
    (
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
    )                                       -- 1*10^1 or 10 rows
    , E2(N) AS (SELECT 1 FROM E1 a, E1 b)   -- 1*10^2 or 100 rows
    , E4(N) AS (SELECT 1 FROM E2 a, E2 b)   -- 1*10^4 or 10,000 rows
    , E8(N) AS (SELECT 1 FROM E4 a, E4 b)   -- 1*10^8 or 100,000,000 rows

    SELECT TOP (@N) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS N FROM E8 
)
GO

发出将创建 100 万行编号表的查询:

SELECT
    COUNT(N)
FROM
    dbo.TallyTable(1000000) tt

看看这个查询的并行执行计划:

并行执行计划

请注意,在收集流运算符之前的“实际”行数是 1,004,588。在收集流运算符之后,行数是预期的 1,000,000。更奇怪的是,该值并不一致,并且会因运行而异。COUNT 的结果总是正确的。

再次发出查询,强制执行非并行计划:

SELECT
    COUNT(N)
FROM
    dbo.TallyTable(1000000) tt
OPTION (MAXDOP 1)

这一次,所有运算符都显示正确的“实际”行数。

非并行执行计划

到目前为止,我已经在 2005SP3 和 2008R2 上尝试过,两者的结果相同。关于可能导致这种情况的任何想法?

sql-server
  • 4 个回答
  • 1533 Views
Martin Hope
Mark Storey-Smith
Asked: 2011-08-26 05:33:48 +0800 CST

优化 BLOB 数据的 BCP 性能

  • 14

我正在计划将 2TB 数据库实时迁移到分区表。该系统从广义上讲是一个文档存储,大部分空间分配给 50kb 到 500kb 之间的 LOB,一小部分在 500kb 到 1MB 范围内。部分迁移将涉及从旧数据库到新数据库的 BCPing 数据。

BCP 是首选方法,因为数据中的当前/历史划分允许在最终切换之前分阶段(在较安静的时期)提取较旧的数据,从而最大限度地减少对实时系统的影响。数据量和存储的可用性排除了对分区方案的就地重建。

由于 BLOB 内容,我怀疑通过尝试 KILOBYTES_PER_BATCH 而不是 ROWS_PER_BATCH 可能会获得一些性能提升。BCP 文档中建议SQL 可以基于此值优化操作。

我找不到关于这些优化的性质或从哪里开始测试的任何指导。在没有建议的情况下,我将在 4/8/16/32/64mb 边界处尝试短跑开始。

更改数据包大小(BCP -a 参数,而不是服务器级别设置)可能会带来一些好处,但除非有人有更公式化的方法,否则我倾向于将其提高到最大值 65535。

sql-server performance
  • 1 个回答
  • 5661 Views
Martin Hope
Mark Storey-Smith
Asked: 2011-08-19 16:44:01 +0800 CST

SQL Profiler - 使用 HostName 过滤器编写跟踪脚本

  • 7

我有一堆脚本化的跟踪定义,用于不同级别的诊断,没有一个按主机名过滤。我今天需要按主机过滤流量,所以:

  1. 启动探查器
  2. 创建了一个空跟踪
  3. 添加 SP:开始/完成
  4. 在主机名上设置过滤器
  5. 脚本化到 test.sql 文件

在 SSMS 中打开文件,没有过滤器的迹象。冲洗,重复,再次相同。假设我在做一些愚蠢的事情,我查找了要使用的值(比它应该更难找到!)并手动添加到我的跟踪定义中,这很有效。

EXEC sp_trace_setfilter @TraceId, 8, 0, 6, N'MyHostName'

回来检查为什么我不能从 Profiler 得到这个工作和相同的结果。我发现在从 SSMS 编写 2000 年的脚本跟踪时提到这是一个问题,但没有提到 SSMS2005/2008 到 2005/2008 服务器的这种情况。这是 Profiler 中的错误吗?

sql-server-2008 sql-server-2005
  • 2 个回答
  • 4275 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve