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-13073

孔夫子's questions

Martin Hope
孔夫子
Asked: 2017-08-15 19:53:18 +0800 CST

SQL Server 2016的日志文件可以应用在SQL Server 2012上吗

  • 2

这与 2012 -> 2016 升级的回滚方案有关。

场景是 SQL Server 2012 数据库恢复到 2016 并应用日志文件,直到它是最新的。然后将生产系统切换到 2016 年。数据库保持在 2012 年的兼容级别。随后,保留 2016 年实例的增量日志,直到需要回滚(假设 8 小时)。

现在可以将日志应用于 SQL Server 2012 实例以使其更新吗?

sql-server-2012 sql-server-2016
  • 3 个回答
  • 91 Views
Martin Hope
孔夫子
Asked: 2012-12-12 03:34:45 +0800 CST

为什么 SQL Server 不优化 UNION?

  • 7

考虑这些查询(SQL Fiddle):

查询一:

SELECT * INTO #TMP1 FROM Foo
UNION
SELECT * FROM Boo
UNION
SELECT * FROM Koo;

查询 2:

SELECT * INTO #TMP2 FROM Foo
UNION
SELECT * FROM Boo
UNION ALL
SELECT * FROM Koo;

请注意,Koo 与 Boo/Foo 不重叠,因此最终结果是相同的。问题是为什么第一个UNION / UNION组合没有合并到单个 SORT 操作中?

sql-server performance
  • 2 个回答
  • 17350 Views
Martin Hope
孔夫子
Asked: 2012-11-04 02:28:58 +0800 CST

SQL ANSI JOIN 优先级

  • 8

我有一个看起来像这样的查询:

    SELECT *
      FROM TBLA A
 LEFT JOIN TBLB B ON A.Col1 = B.Col2
RIGHT JOIN TBLC C ON B.Col3 = C.Col4
      JOIN TBLD D ON C.Col5 = D.Col6

连接将按什么顺序解决?我对 SQL Server 最感兴趣,并将对它的解释标记为答案,但对 ANSI/ISO 标准以及它在各种 RDBMS 中的工作方式同样感兴趣。

这个问题的原因是要弄清楚为什么结果与这个查询不同

    SELECT *
      FROM TBLA A
CROSS JOIN TBLC C
 LEFT JOIN TBLB B ON A.Col1 = B.Col2 AND B.Col3 = C.Col4
      JOIN TBLD D ON C.Col5 = D.Col6
sql-server mysql
  • 2 个回答
  • 3278 Views
Martin Hope
孔夫子
Asked: 2012-10-27 17:07:09 +0800 CST

创建计划指南以缓存(惰性假脱机)CTE 结果

  • 19

我通常通过首先构建一个使用正确计划的查询,然后将其复制到不使用正确计划的类似查询来创建计划指南。但是,这有时很棘手,尤其是在查询不完全相同的情况下。从头开始创建计划指南的正确方法是什么?

SQLKiwi 提到了在 SSIS 中制定计划,有没有一种方法或有用的工具可以帮助为 SQL Server 制定一个好的计划?

有问题的具体实例是这个 CTE:SQLFiddle

with cte(guid,other) as (
  select newid(),1 union all
  select newid(),2 union all
  select newid(),3)
select a.guid, a.other, b.guid guidb, b.other otherb
from cte a
cross join cte b
order by a.other, b.other;

有什么方法可以让结果恰好有 3 个不同guid的 s 而不是更多?我希望将来能够通过包含 CTE 类型查询的计划指南来更好地回答问题,这些查询被多次引用以克服一些 SQL Server CTE 怪癖。

sql-server t-sql
  • 5 个回答
  • 3007 Views
Martin Hope
孔夫子
Asked: 2012-10-25 12:56:44 +0800 CST

对于绝对性能,SUM 更快还是 COUNT 更快?

  • 37

这与计算符合特定条件的记录数有关,例如invoice amount > $100。

我倾向于喜欢

COUNT(CASE WHEN invoice_amount > 100 THEN 1 END)

但是,这同样有效

SUM(CASE WHEN invoice_amount > 100 THEN 1 ELSE 0 END)

我会认为 COUNT 更可取,原因有两个:

  1. 传达意图,即COUNT
  2. COUNT 可能在某处涉及一个简单的i += 1操作,而 SUM 不能指望它的表达式是一个简单的整数值。

有没有人有关于特定 RDBMS 差异的具体事实?

sql-server mysql
  • 3 个回答
  • 40150 Views
Martin Hope
孔夫子
Asked: 2012-10-21 12:36:26 +0800 CST

为什么 DELETE 会对性能产生挥之不去的影响?

  • 20

最后是一个测试脚本,用于比较@table 变量和#temp 表之间的性能。我想我已经正确设置了——性能计时是在 DELETE/TRUNCATE 命令之外进行的。我得到的结果如下(以毫秒为单位)。

@Table Variable  #Temp (delete)  #Temp (truncate)
---------------  --------------  ----------------
5723             5180            5506
15636            14746           7800
14506            14300           5583
14030            15460           5386
16706            16186           5360

只是为了确保我是理智的,这表明 CURRENT_TIMESTAMP (aka ) 是在语句时获取的,而不是批处理时,因此 TRUNCATE/DELETE 与语句GetDate()之间应该没有交互。SET @StartTime = CURRENT_TIMESTAMP

select current_timestamp
waitfor delay '00:00:04'
select current_timestamp

-----------------------
2012-10-21 11:29:20.290

-----------------------
2012-10-21 11:29:24.290

当使用DELETE清表时,第一次运行和后续运行之间的跳转是相当一致的。我对DELETE的理解缺少什么?我已经重复了很多次,交换了顺序,将 tempdb 调整为不需要增长等。

CREATE TABLE #values (
  id int identity primary key, -- will be clustered
  name varchar(100) null,
  number int null,
  type char(3) not null,
  low int null,
  high int null,
  status smallint not null
);
GO
SET NOCOUNT ON;

DECLARE @values TABLE (
  id int identity primary key clustered,
  name varchar(100) null,
  number int null,
  type char(3) not null,
  low int null,
  high int null,
  status smallint not null
);
DECLARE  @ExecutionTime  TABLE(      Duration bigINT    ) 
DECLARE  @StartTime DATETIME,  @i INT = 1; 
WHILE (@i <= 5) 
  BEGIN 
    DELETE @values;
    DBCC freeproccache With NO_InfoMSGS;
    DBCC DROPCLEANBUFFERS With NO_InfoMSGS;
    SET @StartTime = CURRENT_TIMESTAMP -- alternate getdate() 
    /****************** measured process ***********************/ 

    INSERT @values SELECT a.* FROM master..spt_values a join master..spt_values b on b.type='P' and b.number < 1000;

    /**************** end measured process *********************/ 
    INSERT @ExecutionTime 
    SELECT DurationInMilliseconds = datediff(ms,@StartTime,CURRENT_TIMESTAMP) 
    SET @i +=  1 
  END -- WHILE 

SELECT DurationInMilliseconds = Duration FROM   @ExecutionTime 
GO 

-- Temporary table
DECLARE  @ExecutionTime  TABLE(      Duration bigINT    ) 
DECLARE  @StartTime DATETIME,  @i INT = 1; 
WHILE (@i <= 5) 
  BEGIN 
    delete #values;
    -- TRUNCATE TABLE #values;
    DBCC freeproccache With NO_InfoMSGS;
    DBCC DROPCLEANBUFFERS With NO_InfoMSGS;
    SET @StartTime = CURRENT_TIMESTAMP -- alternate getdate() 
    /****************** measured process ***********************/ 

    INSERT #values SELECT a.* FROM master..spt_values a join master..spt_values b on b.type='P' and b.number < 1000;

    /**************** end measured process *********************/ 
    INSERT @ExecutionTime 
    SELECT DurationInMilliseconds = datediff(ms,@StartTime,CURRENT_TIMESTAMP) 
    SET @i +=  1 
  END -- WHILE 

SELECT DurationInMilliseconds = Duration FROM   @ExecutionTime 
GO

DROP TABLE  #values 
SET NOCOUNT OFF;
sql-server performance
  • 2 个回答
  • 4223 Views
Martin Hope
孔夫子
Asked: 2012-10-17 12:59:07 +0800 CST

用于查看昨天所有 SQL 代理作业的开始/结束的 TSQL 查询

  • 1

请参阅此相关查询:什么是可视化 SQL 代理作业的好工具?

然而,我并不追求视觉工具,因为我正在寻找建立自己的可视化。这是我的出发点,但你会同意它非常缺乏。

select TOP(1000)
       h.run_date, min(h.run_time), j.name, j.description, max(h.run_duration) run_duration
from msdb..sysjobhistory h
join msdb..sysjobs j on j.job_id = h.job_id
group by h.run_date, j.name, j.description, h.instance_id, j.job_id
having max(h.run_duration) > 1000  -- << -- 10 minutes encoded in HHMMSS (digits)
order by h.run_date desc, 2 desc

关键在于,似乎没有sysjobhistory表的键将其标识为 a 的特定“实例” sysjob。例如,在 12:30 开始的具有 4 个步骤的作业被插入sysjobhistory4 次,具有不同的instance_ids(唯一)。它们都与sysjob.job_id值相关,但这是时间表,而不是作业的调用。我应该看另一张桌子吗?

这可能相当简单,因为 SSMS 可以轻松完成。

sql-server sql-server-2012
  • 1 个回答
  • 5723 Views
Martin Hope
孔夫子
Asked: 2012-10-03 18:52:04 +0800 CST

什么是统计更新抽样的好指南

  • 4

范围:以 10 种方式索引的十亿记录表。每天的变化率为百分之一。

一些索引单调递增(日期时间/时间戳),但常见查询很可能到达尾部。我假设这种类型的统计数据需要经常更新,否则最近的数据会在索引中消失?

其他索引的分布更为随机,例如(客户密钥、日期时间)。这些可以通过不太频繁的更新来实现,因为统计数据非常能代表整体。我们可以让索引的变化足以强制对这些进行自动统计更新,对吗?

对于这两种类型,如果要抽样的数据是随机的并且非常能代表整体,那么将抽样从 10% 增加到 100% 有什么好处吗?

寻找结核病数据的最佳实践。

sql-server sql-server-2012
  • 2 个回答
  • 221 Views
Martin Hope
孔夫子
Asked: 2011-12-02 18:36:12 +0800 CST

SQL Server AlwaysOn 故障转移透明度

  • 1

这是使用RC0。

我已经设置了一个 SQL Server 2012 AlwaysOn(或更准确地说,极有可能但并非总是)可用性组。

我使主节点脱机。

  1. 辅助节点最多需要 25 秒才能承担主要角色。
  2. 故障转移时正在执行的任何查询都会向客户端返回错误。

任何测试过这项新的 AlwaysOn 功能的人都可以验证我的结果吗?

  1. 我应该多久执行并完成故障转移?
  2. 是否针对新主节点重新提交了正在执行的查询,或者我是否更正了它会导致客户端出现“连接失败”类型的错误?
  3. 以下形式的连接字符串是否正确,即没有“Failover_Partner”(因为这不是镜像)?

ConnectionString=Provider=SQLOLEDB.1;Server=10.10.10.10;User ID=x;Password=y;Persist Security Info=True;Initial Catalog=z

注意:我尝试了下面的方法,但我得到的只是“连接链接失败”并且它永远无法恢复。有人会认为 Native 客户端会更好用吗?

ConnectionString=Provider=SQLNCLI11.1;Server=tcp:10.10.10.10,8888;User ID=x;Password=y;Persist Security Info=True;Initial Catalog=z

sql-server sql-server-2012
  • 2 个回答
  • 1186 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