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

Francesco Mantovani's questions

Martin Hope
Francesco Mantovani
Asked: 2023-08-28 19:20:46 +0800 CST

计算total_worker_time(以分钟为单位)

  • 2

我有一个简单的查询,可以通过 query_plan_hash 和 query_hash显示前 10 个经过的时间:

PRINT '-- top 10 elapsed time  by query_plan_hash and query_hash --'

SELECT TOP 10 query_plan_hash
    ,query_hash
    ,sum(execution_count) AS 'execution_count'
    ,sum(total_worker_time) AS 'total_worker_time'
    ,SUM(total_elapsed_time) AS 'total_elapsed_time'
    ,SUM(total_logical_reads) AS 'total_logical_reads'
    ,max(REPLACE(REPLACE(REPLACE(SUBSTRING(CONVERT(NVARCHAR(4000), st.[text]), qs.statement_start_offset / 2 + 1, CASE 
                            WHEN qs.statement_end_offset = - 1
                                THEN LEN(st.[text])
                            ELSE qs.statement_end_offset / 2 - qs.statement_start_offset / 2 + 1
                            END), CHAR(13), ' '), CHAR(10), ' '), CHAR(09), ' ')) AS sample_statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
GROUP BY query_plan_hash
    ,query_hash
ORDER BY sum(total_elapsed_time) DESC;
GO

我如何计算:

  • 总工作时间
  • 总经过时间
  • 逻辑读取总数

以分钟而不是毫秒为单位?

query-performance
  • 2 个回答
  • 60 Views
Martin Hope
Francesco Mantovani
Asked: 2023-06-07 04:26:14 +0800 CST

Azure SQL 数据库::SHRINKDATABASE 增加未分配空间

  • 4

我正在尝试尽可能多地压缩 Azure SQL 数据库,以便将它们放入 SQL 弹性池中。

我正在使用此查询,它允许我比较操作前后的未分配空间:

EXEC sp_spaceused @oneresultset = 1
GO

DECLARE @dbName VARCHAR(50)
SELECT @dbName = DB_NAME()
DBCC SHRINKDATABASE(@dbName, TRUNCATEONLY) 
GO

EXEC sp_spaceused @oneresultset = 1
GO

我注意到有时未分配的空间实际上是增加而不是减少:

在此输入图像描述

这种事发生过不止一次。我在网上读到,使用SHRINKDATABASE索引后可能到处都是,但这里似乎并index_size没有真正改变。旁边的那个unused只有 50MB,所以这不是问题:

在此输入图像描述

这怎么可能?

以及如何正确SHRINKDATABASE使用Azure SQL数据库?

你不应该收缩数据库不是一个有效的答复,因为在这种情况下,是的,我必须获得空间。

azure-sql-database
  • 1 个回答
  • 21 Views
Martin Hope
Francesco Mantovani
Asked: 2023-06-07 04:07:25 +0800 CST

SQL 弹性池:重建索引时“信号量超时期限已过期”

  • 4

我正在缩小 SQL 弹性池上已有的数据库。

目标是在一个独特的弹性池中容纳尽可能多的数据库。

为了做到这一点,我偶然发现了一个博客,建议运行这个查询,它基本上做了三件事:

  1. -- 步骤1:重建所有索引
  2. -- 第 2 步:收缩数据库
  3. -- 步骤3:重建所有索引

查询来了:

create or alter procedure [#ForEachTable](@inputStmt nvarchar(max))
as
begin
    set nocount, xact_abort on;
    drop table if exists [#Tables];

    select concat(quotename([S].[name]), N'.', quotename([T].[name])) as [table]
    into [#Tables]
    from [sys].[schemas] as [S]
        inner join [sys].[tables] as [T]
            on [S].[schema_id] = [T].[schema_id]
    where [T].[is_ms_shipped] = 0;

    declare tables cursor local fast_forward for select [table] from [#Tables];
    open tables;

    declare @table nvarchar(max);
    fetch next from tables into @table;

    declare @total integer = (select count(*) from [#Tables]);
    declare @space integer = len(cast(@total as nvarchar(max)));
    declare @current integer = 1;
    while @@fetch_status = 0
    begin
        declare @stmt nvarchar(max) = replace(@inputStmt, N'?', @table);
        
        declare @msg nvarchar(max) = concat(
            sysutcdatetime(), N' - ',
            N'[', right(concat(N'000', @current), @space), N'/', @total, N']: ',
            N'Executing command: "', @stmt, N'".'
        );
        raiserror(@msg, 10, 1) with nowait;

        execute [sys].[sp_executesql] @stmt = @stmt;
    
        fetch next from tables into @table;
        set @current += 1;
    end;

    close tables;
    deallocate tables;
end;
go

-- Step 1: Rebuild all the indexes
raiserror(N'First rebuild...', 10, 1) with nowait;
execute [#ForEachTable] N'alter index all on ? rebuild with (online = on);';
go

-- Step 2: Shrink the database
raiserror(N'Shrink...', 10, 1) with nowait;
declare @stmt nvarchar(max) = concat(N'dbcc shrinkdatabase (', db_id(), N')');
execute [sys].[sp_executesql] @stmt = @stmt;
go

-- Step 3: Rebuild all the indexes
raiserror(N'Final rebuild...', 10, 1) with nowait;
execute [#ForEachTable] N'alter index all on ? rebuild with (online = on);';

但几个小时后我收到此警告消息,然后 SSMS 关闭:

First rebuild...
2023-06-06 07:39:50.2128129 - [0001/1467]: Executing command: "alter index all on [dbo].[xhisto_2018] rebuild with (online = on);".
2023-06-06 07:39:50.2440440 - [0002/1467]: Executing command: "alter index all on [dbo].[Affiliate] rebuild with (online = on);".
2023-06-06 07:39:50.2596849 - [0003/1467]: Executing command: "alter index all on [dbo].[template_step] rebuild with (online = on);".
2023-06-06 07:39:50.2753131 - [0004/1467]: Executing command: "alter index all on [dbo].[mapping_monthly] rebuild with (online = on);".
2023-06-06 07:39:50.7596876 - [0005/1467]: Executing command: "alter index all on [dbo].[statement] rebuild with (online = on);".
2023-06-06 07:39:50.7753120 - [0006/1467]: Executing command: "alter index all on [dbo].[history] rebuild with (online = on);".
2023-06-06 07:39:50.7753120 - [0007/1467]: Executing command: "alter index all on [dbo].[formula_items] rebuild with (online = on);".
2023-06-06 07:39:50.7909373 - [0008/1467]: Executing command: "alter index all on [dbo].[monthly_staging] rebuild with (online = on);".
2023-06-06 07:39:50.8221873 - [0009/1467]: Executing command: "alter index all on [dbo].[sales] rebuild with (online = on);".
Msg 121, Level 20, State 0, Line 82
A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)

Completion time: 2023-06-06T15:21:35.2092836+02:00

我正在从安装在 Azure 上的 VM 上的 SSMS 运行查询。非常肯定这不可能是连接问题。这种情况发生二分之一。

azure-sql-database
  • 1 个回答
  • 37 Views
Martin Hope
Francesco Mantovani
Asked: 2023-06-02 21:56:38 +0800 CST

如何缩小数据库并申请更多存储空间

  • 5
赏金将在 4 天后到期。此问题的答案有资格获得+50声望赏金。 Francesco Mantovani想提请更多人关注这个问题:
我确定我不是第一个遇到这个问题的人。如何在不增加层级的情况下在 SQL 弹性池中容纳更多数据库?
这些数据库主要是未使用的,它们在几个月前就被压缩了。收缩似乎不起作用。
这个问题是从 Stack Overflow迁移过来的,因为它可以在 Database Administrators Stack Exchange 上回答。 4 天前迁移 。

我创建了一个 SQL 弹性池,但我没有更多的存储空间:

在此处输入图像描述

我DBCC SHRINKDATABASE (N'db1')按照本指南在每个数据库上运行以申请空间:Reduce Azure SQL Database Size但似乎我没有获得任何空间。

我应该使用吗DBCC SHRINKFILE (log, 0)?

我正在考虑自动收缩,但如果背后的逻辑与 SHRINKDATABASE 相同,则没有必要将其放置到位。

那么如何在 SQL Elastic Pool 上申请未使用的空间呢?

azure
  • 2 个回答
  • 45 Views
Martin Hope
Francesco Mantovani
Asked: 2022-07-13 02:28:37 +0800 CST

SQL Server 2019 RTM GDR 的服务更新 (KB4517790) - 安装错误 - 0x80070643

  • 1

SQL Server 仍在顺利运行,但我注意到我在 Windows 更新上有一条警报,上面写着:

Servicing Update for SQL Server 2019 RTM GDR (KB4517790) 
Install error - 0x80070643

在此处输入图像描述

我尝试重新启动和更新服务器,但它仍然没有安装。

所以我下载了KB4517790,但是当我尝试安装服务时,出现错误:

There are no SQL Server instances or shared features that can be updated on this computer.

在此处输入图像描述

奇怪的。

我单击返回两次,然后检查查看详细报告,一切都很好:

Microsoft SQL Server 2019 - System Configuration Check Report
规则名称 规则说明 结果 消息/纠正措施
PatchGlobalRules:SQL Server 2019 安装程序配置检查规则组“PatchGlobalRules”
# Engine_ResourceDLLUpdateRestartCheck 检查是否将更新共享资源 DLL,从而导致此节点上活动的群集 SQL Server 实例重新启动。 不适用 此规则不适用于您的系统配置。
# AclPermissionsFacet 检查 SQL Server 注册表项是否一致。 通过 SQL Server 注册表项是一致的,可以支持 SQL Server 安装或升级。
# Cluster_IsLocalNodeGroupOwner 检查本地计算机是否是包含 SQL Server 服务、Analysis Services 服务或通用服务的故障转移群集实例的联机群集组的所有者。 通过 本地计算机不是包含 SQL Server 服务、Analysis Services 服务或通用服务的故障转移群集实例的联机群集组的所有者。SQL Server 实例不需要脱机。
# Cluster_IsOnlineIfClustered 验证计算机未集群或计算机已集群且集群服务处于联机状态。 通过 计算机未建立群集或群集已启动并联机。
# 需要重启检查 检查是否需要挂起的计算机重新启动。挂起的重新启动可能会导致安装程序失败。 通过 计算机不需要重新启动。
# ThreadHasAdminPrivilegeCheck 检查运行 SQL Server 安装程序的帐户是否在计算机上具有管理员权限。 通过 运行 SQL Server 安装程序的帐户在计算机上具有管理员权限。
# WmiServiceStateCheck 检查 WMI 服务是否已在计算机上启动和运行。 通过 Windows Management Instrumentation (WMI) 服务正在运行。

所以我在 PowerShell 中找到了一个很棒的命令,可以让我恢复所有 Windows 更新日志。

我键入Get-WindowsUpdateLog,一个名为 WindowsUpdate.log 的文件现在在我的桌面上。

当我打开它时,我发现:

2022/07/12 11:35:06.5502777 14516 14848 ComApi          Byte length of the input buffer for deserialization: 36024
2022/07/12 11:35:06.5518950 14516 14848 ComApi          Deserialized installable update Servicing Update for SQL Server 2019 RTM GDR (KB4517790), UpdateID = {CA10020A-BECD-4535-B06D-E30E92F01AD6.200}
2022/07/12 11:35:06.5521232 14516 14848 Test            AUTest.cab validation: Test keys are not allowed
2022/07/12 11:35:06.6192658 14516 8864  ComApi          Serializing CUpdate CA10020A-BECD-4535-B06D-E30E92F01AD6.200, Last modified time 2022-07-12T09:25:10Z
2022/07/12 11:35:06.6198416 14516 8864  ComApi          Update serialization complete. BSTR byte length = 36024
2022/07/12 11:35:21.4414511 21868 24160 Agent           Earliest future timer found: 
2022/07/12 11:35:21.4414806 21868 24160 Agent               Timer: 29A863E7-8609-4D1E-B7CD-5668F857F1DB, Expires 2022-07-12 12:48:15, not idle-only, not network-only
2022/07/12 11:35:22.4513120 21868 25304 Shared          UninitializeSUS
2022/07/12 11:35:22.4513184 21868 25304 Misc            CSusClientGlobal::DoServicePreShutdown
2022/07/12 11:35:22.4517025 21868 25304 IdleTimer       Idle timer disabled in preparation for service shutdown
2022/07/12 11:35:22.4517139 21868 25304 Misc            WUTaskManager uninit
2022/07/12 11:35:22.4517196 21868 25304 Agent           Earliest future timer found: 
2022/07/12 11:35:22.4517386 21868 25304 Agent               Timer: 7971F918-A847-4430-9279-4A52D1EFE18D, Expires 2022-07-12 10:37:14, not idle-only, network-only
2022/07/12 11:35:22.4683034 21868 25304 Misc            CreateSessionStateChangeTrigger, TYPE:2, Enable:No
2022/07/12 11:35:22.4683300 21868 25304 Misc            CreateSessionStateChangeTrigger, TYPE:4, Enable:No
2022/07/12 11:35:22.4916515 21868 25304 Misc            Agent uninit
2022/07/12 11:35:22.4916711 21868 25304 Agent           *FAILED* [8007139F] file = onecore\enduser\windowsupdate\client\engine\handler\cbs\lib\uhcbs.cpp, line = 4848
2022/07/12 11:35:22.4916832 21868 25304 DownloadManager Exiting CDownloadHandlerCallbackHandler::Uninit within timeout bounds
2022/07/12 11:35:22.4925943 21868 18656 Agent           Deployment session (host process 21868) signalled to exit...
2022/07/12 11:35:22.4926590 21868 18656 Deployment      Deployment job Id 3A2949A0-E56C-4FA1-AB01-8282F1D469DA : Destructor invoked for deployment job.
2022/07/12 11:35:22.4926639 21868 18656 Deployment      Deployment job Id 3A2949A0-E56C-4FA1-AB01-8282F1D469DA : WaitForEnd invoked for deployment job. Beginning the wait now!
2022/07/12 11:35:22.4926702 21868 18656 Deployment      Deployment job Id 3A2949A0-E56C-4FA1-AB01-8282F1D469DA : WaitForEnd for deployment job completed. Job state = Complete
2022/07/12 11:35:22.4942066 21868 25304 Misc            Reporter uninit
2022/07/12 11:35:22.4943410 21868 25304 Misc            network cost manager uninit
2022/07/12 11:35:22.4943651 21868 25304 Misc            Eventer uninit
2022/07/12 11:35:23.5095262 21868 25304 Misc            ServiceManager uninit
2022/07/12 11:35:23.5098089 21868 25304 Misc            PersistentTimeoutScheduler uninit
2022/07/12 11:35:23.5098136 21868 25304 Misc            datastore uninit
2022/07/12 11:35:23.5630608 21868 25304 Misc            setting cache uninit
2022/07/12 11:35:23.5630619 21868 25304 Misc            security checker uninit
2022/07/12 11:35:23.5630660 21868 25304 Misc            Test Hook uninit
2022/07/12 11:35:23.5630667 21868 25304 Misc            IdleTimer uninit
2022/07/12 11:35:23.5635012 21868 25304 Shared          * END * Service exit Exit code = 0x240001

我看到有东西掉了下来,但我不知道如何移动。

我已经尝试过 SQL Server 修复,但没有帮助。

我在最新版本:

Microsoft SQL Server 2019 (RTM-CU16-GDR) (KB5014353) - 15.0.4236.7 (X64)   May 29 2022 15:55:47   Copyright (C) 2019 Microsoft Corporation  Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 22000: ) (Hypervisor) 
sql-server update
  • 1 个回答
  • 404 Views
Martin Hope
Francesco Mantovani
Asked: 2022-06-18 03:23:37 +0800 CST

PolyBase :: 将数据库上下文更改为“DWQueue”

  • 0

我正在最新的 SQL Server 2019 上安装 PolyBase。

在安装过程中,我遇到了这个错误:https ://www.youtube.com/watch?v=Oxd8yeiBfig (对视频质量感到抱歉)

The proposed new database owner is already a user or aliased in the database. 
Changed database context to 'DWQueue'.

是的,这里已经解决了这个错误:

SQL Server 2019 Polybase 安装错误“建议的新数据库所有者已经是数据库中的用户或别名”

这对我来说意味着管理员无法安装 PolyBase。

有没有不放弃我的出路Administrator?

sql-server polybase
  • 1 个回答
  • 34 Views
Martin Hope
Francesco Mantovani
Asked: 2022-06-03 01:44:18 +0800 CST

Docker 上的 DB2 :: IBM Data Studio 在创建新数据库时提示错误

  • 0

我遵循了这个简单的指南,并且能够在 Docker 上安装 DB2。

我现在想导入一个示例数据库来玩。

所以我打开 IBM Data Studio,我右键单击实例 > New database... ,我填写了我的用户名和密码,但随后出现错误:

系统无法验证您指定的实例。输入一个有效的实例名称或单击实例名称字段旁边的按钮并从列表中选择一个。com.ibm.datatools.adm.explorer.ui.model.InstanceException:在“验证系统 192.168.1.44 中的实例 db2inst1”期间发生内部错误。

在此处输入图像描述

如果我扩展错误以获取更多详细信息,我会看到:

'验证系统 192.168.1.44 中的实例 db2inst1。' 遇到了问题。

在“验证系统 192.168.1.44 中的实例 db2inst1。”期间发生内部错误。

在“验证系统 192.168.1.44 中的实例 db2inst1。”期间发生内部错误。

com.ibm.db2.das.core.DasMessageIdentifier(初始化失败)

在此处输入图像描述

深入了解官方文档让我想到了这个解决方案,但我认为这不是问题所在。

让我感兴趣的是.IP 地址后面的“点”( )。这可能是错误吗?

在此处输入图像描述

或者有没有其他方法可以从 IBM Data Studio 导入示例数据库?

db2 db2-luw
  • 1 个回答
  • 71 Views
Martin Hope
Francesco Mantovani
Asked: 2022-02-09 05:20:51 +0800 CST

SQL Server ::这条记录占用了多少8K页?

  • 3

我想看看特定记录占用了多少 8K 页。

如果您在 AdventureWorks2019 上运行此查询:

SELECT ProductID
    ,Name
    ,DATALENGTH(Name) AS SizeInBytes
    ,LEN(Name) AS NumberOfCharacters
FROM Production.Product
ORDER BY 1

你有一个被每条记录占用的列表:

产品编号 姓名 大小字节 字符数
1 可调种族 30 15
2 轴承球 24 12
3 BB滚珠轴承 30 15
4 耳机滚珠轴承 42 21
316 刀 10 5

如何添加包含该记录所占用页数的列?

我当然可以,DATALENGTH(Name) / 8 AS PagesTaken但我想知道是否有一些命令可以让我通过SELECT.

sql-server t-sql
  • 1 个回答
  • 902 Views
Martin Hope
Francesco Mantovani
Asked: 2021-08-17 07:00:53 +0800 CST

.bacpak 文件中的 .BCP 文件是什么?

  • 4

在 dba.stackexchange.com 上潜水,我找到了一个很好的答案,教我如何.bacpac使用文件资源管理器打开文件。

我试了一下数据库AdventureWorks2008R2,我所做的只是:

  1. 将数据库保存为.bacpac文件
  2. 将文件扩展名重命名为.zip
  3. 解压

到这里,您可以将数据库的表视为文件夹,并且在每个文件夹中您可以看到原始数据。

在此处输入图像描述

但是当我打开文件夹时,Person.Address我看到里面有 38 个文件,扩展名为.BCP.

在此处输入图像描述

一开始我教他们是数据被拆分的页面。但那些不能是页面,因为它们的重量约为67KB. 页面应该有重量8KB。

所以我用这个查询检查了页数:

-- Total # of pages, used_pages, and data_pages for a given heap/clustered index
SELECT 
    t.NAME AS TableName,
    p.rows AS RowCounts,
    SUM(a.total_pages) AS TotalPages, 
    SUM(a.used_pages) AS UsedPages, 
    (SUM(a.total_pages) - SUM(a.used_pages)) AS UnusedPages
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, p.Rows
ORDER BY 
    t.Name

我发现Person.Address表格有689页面。

那么这 38 个.BCP文件是什么?

sql-server t-sql
  • 1 个回答
  • 643 Views
Martin Hope
Francesco Mantovani
Asked: 2021-02-13 14:12:18 +0800 CST

Star/Snowflake 数据库设计是否适合应用程序?什么是替代方案?

  • 0

我需要为一家制药公司解决一个练习,他们要求我根据一些信息从头开始创建一个数据库结构。

因为我希望它具有可扩展性且“面向未来”,所以我决定遵循该star/snowflake结构。现在它看起来比雪花更像明星,但想法就在那里。我有一个关于主事实表(研究)以及如何表示维度表状态的特定问题。

我想出了2个选项:

  • 选项 1:事实表研究> 外键 > 维度表合同> 外键 > 维度表状态。

所以我们通过两个维度表来表示事实表上的状态。我将通过 a JOINin aview或其他方式做到这一点...

在此处输入图像描述

  • 选项 2:事实表研究> 外键 > 维度表状态。

这样,我们将事实表(研究)直接链接到维度表状态。

在此处输入图像描述

我应该选择选项 1还是选项 2?

我害怕将太多维度表链接到事实表。这是我第一次尝试创建数据库结构。

欢迎任何建议,欢迎任何建议,尤其是来自经验丰富的数据库架构师和业余爱好者的建议。

谢谢

编辑:添加更多信息

谢谢@AntC 的提问。事实上,这根本不是一个数据仓库场景,而是一家制药公司需要一个新软件来跟踪他们的临床试验的场景。

但当然,最著名的模式是 Star/Snowflake,我不想使用任何分层模式。同时我想避免三角形、菱形、圆形之类的形状,因为即使现在只有 100 个用户知道这个数据库在 10 年后会是什么样子。这个想法是长期塑造一些东西,据我所知,我认为星形/雪花形状也适合正常应用。

relational-theory architecture
  • 1 个回答
  • 106 Views
Martin Hope
Francesco Mantovani
Asked: 2020-08-07 02:10:12 +0800 CST

SQL Server :: 如何将国家代码列移动到另一个表?

  • 0

我有 2 张桌子:

  • tbl_Countries:250 个值,包括CountryName(Afghanistan)、TwoCharCountryCode(AF)、ThreeCharCountryCode(AFG) 等列。

像这样:

CountryName    TwoCharCountryCode ThreeCharCountryCode 
Afghanistan    AF                 AFG
Aland Islands  AX                 ALA
Albania        AL                 ALB
Algeria        DZ                 DZA
American Samoa AS                 ASM
Andorra        AD                 AND
Angola         AO                 AGO

和

  • population_by_country_2020: 235 个值,其中包含Country_or_dependency(Afghanistan) 列,但缺少 2 和 3CHAR国家代码。

像这样:

CountryName    TwoCharCountryCode ThreeCharCountryCode 
Afghanistan    NULL               NULL
Albania        NULL               NULL
Algeria        NULL               NULL
American Samoa NULL               NULL
Andorra        NULL               NULL
Angola         NULL               NULL
Anguilla       NULL               NULL

......是的,因为他们有不同的价值观,他们永远不会完美匹配,但我可以用手做那些错过的人。

我总体上想做的是AF在AFG“阿富汗”行中来回tbl_Countries移动。population_by_country_2020

在此处输入图像描述

如何存档?

sql-server t-sql
  • 1 个回答
  • 81 Views
Martin Hope
Francesco Mantovani
Asked: 2019-11-30 05:39:05 +0800 CST

如何维护一个永远运行的查询?

  • -1

我想运行一个查找素数的查询,并且我想永远运行它。

@Solomon Rutzky 在这个页面上给定范围内的素数,给我们一个关于埃拉托色尼筛的好例子。

DECLARE  @RangeStart INT = 1,
         @RangeEnd INT = 100000;
DECLARE  @HowMany INT = CEILING((@RangeEnd - @RangeStart + 1) / 2.0);

;WITH frst AS
(
    SELECT  tmp.thing1
    FROM        (VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)) tmp(thing1)
), scnd AS
(
    SELECT  0 AS [thing2]
    FROM        frst t1
    CROSS JOIN frst t2
    CROSS JOIN frst t3
), base AS
(
    SELECT  TOP( CONVERT( INT, CEILING(SQRT(@RangeEnd)) ) )
            ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS [num]
    FROM        scnd s1
    CROSS JOIN  scnd s2
), nums AS
(
    SELECT  TOP (@HowMany)
            (ROW_NUMBER() OVER (ORDER BY (SELECT 1)) * 2) + 
                (@RangeStart - 1 - (@RangeStart%2)) AS [num]
    FROM        base b1
    CROSS JOIN  base b2
), divs AS
(
    SELECT  [num]
    FROM        base b3
    WHERE   b3.[num] > 4
    AND     b3.[num] % 2 <> 0
    AND     b3.[num] % 3 <> 0
)
SELECT  given.[num] AS [Prime]
FROM        (VALUES (2), (3)) given(num)
WHERE   given.[num] >= @RangeStart
UNION ALL
SELECT  n.[num] AS [Prime]
FROM        nums n
WHERE   n.[num] BETWEEN 5 AND @RangeEnd
AND     n.[num] % 3 <> 0
AND     NOT EXISTS (SELECT *
                    FROM divs d
                    WHERE d.[num] <> n.[num]
                    AND n.[num] % d.[num] = 0
                    );

所以我们可以很容易地生成一个从 0 到 100 的所有素数的列表。

但是假设我希望查询在接下来的 20 年内运行,所以我设置了一个非常大的数字:

DECLARE  @RangeStart INT = 1,
         @RangeEnd INT = 100000000000000000000000000000000000000000000000000;

这就是问题所在:我如何才能在接下来的 20 年内维护这个查询?

因为埃拉托色尼筛法有一个特点:

如果它被中断,你必须从头开始。

所以我的问题从这里开始:

  • 我如何设法更换 CPU、升级 RAM、更换硬盘等...
  • 如何管理故障转移灾难场景以避免该脚本停止?
  • 故障转移会保证查询不会停止吗?
  • 云冗余和故障转移到不同的提供商(Azure / AWS / GCE)这将确保脚本不会停止吗?
  • 如果故障转移是从 Azure 到全球 2 个不同地区的 AWS 怎么办?此故障转移会保持存储过程运行吗?

现在是灾难恢复部分:

  • 我可以备份,比如说每个月,该存储过程的状态,并最终从该映像恢复吗?
  • 如果我在虚拟机上运行存储过程并拍摄快照,我可以恢复存储过程吗?

我确信有人在这样做:这个分解素数的在线数据库http://factordb.com/status.php已经成功地从 200MB(2014 年)增加到今天(2019 年)的近 800MB。

在此处输入图像描述

t-sql failover
  • 3 个回答
  • 237 Views
Martin Hope
Francesco Mantovani
Asked: 2018-09-25 12:49:03 +0800 CST

T-SQL:如何将 SUM() 与 GROUP BY 一起使用

  • -3

我有一个非常基本的问题:

我有这个代码,它可以工作并返回23 行:

select 
Issue_ID
,sum(HoursSpent) as TimeSpent
--,DateClosed 
from SixMonthsReview
where StaffAssigned = 'Teddy Bear'
and DateClosed between '2018-07-01 06:36:26.790' and '2018-08-01 06:36:26.790'
group by Issue_ID

但是如果我取消注释第 4 行,我会收到一个错误:

Msg 8120, Level 16, State 1, Line 4
Column 'SixMonthsReview.DateClosed' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

所以我添加DateClosed到GROUP BY但现在返回了40 行,我可以看到双打。

我哪里错了?

sql-server t-sql
  • 1 个回答
  • 1445 Views
Martin Hope
Francesco Mantovani
Asked: 2018-03-13 00:34:23 +0800 CST

T-SQL:如何创建每月运行的作业

  • 0

我已经知道如何使用 来安排每月的工作SQL Server Agent > Jobs,我现在想学习如何使用 T-SQL 来安排这样的工作。

我知道如何每天在特定时间安排工作:

CREATE PROCEDURE MyTask
 AS
BEGIN  
    SET NOCOUNT ON;
    -- Now is set to run evry day at 23:00
    -- But I need to run it every 1th of the month 
    declare @delayTime nvarchar(50)
    set @delayTime = '23:00'

    while 1 = 1
    begin
        waitfor time @delayTime 
        begin
            -- Here the query I want to run every month
            select * from AdventureWorks2012.dbo.AWBuildVersion;
        end
    end
END

-- Sets stored procedure for automatic execution.
sp_procoption    @ProcName = 'MyTask',
                @OptionName = 'startup',
                @OptionValue = 'on' 

在此Microsoft 指南中,我看到我可以使用@freq_type = 16,但我不知道如何设置它,非常感谢您提供一个示例

sql-server stored-procedures
  • 2 个回答
  • 7263 Views
Martin Hope
Francesco Mantovani
Asked: 2018-03-12 23:49:24 +0800 CST

在所有数据库中查找特定的表和列值

  • 1

这是一个关于逻辑的问题,可以帮助我更多地了解如何迭代到我的数据库中。

在我的服务器上,我有几个 AdventureWorks* 数据库:

在此处输入图像描述

我有一个冷查询帮助我遍历我的所有数据库 AdventureWorks* 而不是:

CREATE TABLE #LIst_DB (name nvarchar(128))

INSERT INTO #LIst_DB 

select name from  sys.databases
WHERE database_id > 4
AND state = 0;

select * from #LIst_DB

DROP TABLE #LIst_DB

对于每个 AdventureWorks* 数据库,我想AWBuildVersion在每个 DB 旁边列出:

在此处输入图像描述

此时我很困惑,因为有两个问题我不知道如何解决:

  1. 如何select [Database Version] from AWBuildVersion为每个数据库运行一个?
  2. 如果数据库没有AWBuildVersion表怎么办?

在这里我找到了这个查询:

DECLARE @SQL NVARCHAR(max)

SET @SQL = stuff((
            SELECT '
UNION
SELECT ' + quotename(NAME, '''') + ' as Db_Name, Name collate SQL_Latin1_General_CP1_CI_AS as Table_Name
FROM ' + quotename(NAME) + '.sys.tables WHERE NAME =  @TableName '
            FROM sys.databases
            ORDER BY NAME
            FOR XML PATH('')
                ,type
            ).value('.', 'nvarchar(max)'), 1, 8, '')

--PRINT @SQL;

EXECUTE sp_executeSQL @SQL
    ,N'@TableName varchar(30)'
    ,@TableName = 'AWBuildVersion'

这使我接近我的目标,但它显示了AWBuildVersion我需要列 Database Version = 11.0.2100.60的表名

在此处输入图像描述

sql-server system-tables
  • 3 个回答
  • 2993 Views
Martin Hope
Francesco Mantovani
Asked: 2018-03-12 18:46:17 +0800 CST

INSERT MASTER.sys.sysdatabases 结果到一个临时表

  • 2

我有这个查询迭代我的 SQL Server 上的所有数据库

DECLARE @DB_Name varchar(100) 
DECLARE @Command nvarchar(200)
DECLARE database_cursor CURSOR FOR 

SELECT name 
FROM MASTER.sys.sysdatabases

where name not in ('master','tempdb','model','msdb')

OPEN database_cursor

FETCH NEXT FROM database_cursor INTO @DB_Name

WHILE @@FETCH_STATUS = 0 
BEGIN 
     SELECT @Command = 'SELECT ' + '''' + @DB_Name + '''' + 'as DB_name, SF.filename, SF.size FROM sys.sysfiles SF'
     EXEC sp_executesql @Command

     FETCH NEXT FROM database_cursor INTO @DB_Name 
END

CLOSE database_cursor 
DEALLOCATE database_cursor

但是如何将结果全部存储在一个临时表中呢?

sql-server temporary-tables
  • 1 个回答
  • 247 Views
Martin Hope
Francesco Mantovani
Asked: 2018-03-09 00:12:16 +0800 CST

使用 T-SQL 创建数据库邮件返回“主体名称无效”

  • 0

配置数据库邮件太长了。

所以我想创建一个自动为我创建的脚本

DECLARE @YourEmail NVARCHAR(50) SET @YourEmail = '[email protected]' --Put here your E-mail
DECLARE @YourPassword NVARCHAR(50) SET @YourPassword = 'MyPassword' --Put here your E-mail
DECLARE @YourSMTPSserver NVARCHAR(50) SET @YourSMTPSserver = 'MySMTPserver' --Put here your SMTP Server
DECLARE @YourPort int SET @YourPort = '25' --Put here your SMTP port

-- Create a Database Mail account  
EXECUTE msdb.dbo.sysmail_add_account_sp  
    @account_name = 'SQL_Spring_Cleaning_Account',  
    @description = 'Mail account for SQL_Spring_Cleaning.',  
    @email_address = @YourEmail,  
    @replyto_address = @YourEmail,
    @display_name = 'SQL_Spring_Cleaning Mailer',  
    @mailserver_name = @YourSMTPSserver, 
    @port = @YourPort,
    @use_default_credentials = 0,
    @username = @YourEmail,
    @password = @YourPassword;


-- Create a Database Mail profile  
EXECUTE msdb.dbo.sysmail_add_profile_sp  
    @profile_name = 'SQL_Spring_Cleaning_Profile',  
    @description = 'Profile used for SQL_Spring_Cleaning mail.' ; 

-- Add the account to the profile  
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  
    @profile_name = 'SQL_Spring_Cleaning_Profile',  
    @account_name = 'SQL_Spring_Cleaning_Account',  
    @sequence_number =1 ; 

-- Grant access to the profile to the DBMailUsers role  
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp  
    @profile_name = 'SQL_Spring_Cleaning_Profile',  
    @principal_name = 'ASPIRES3\franc',  
    @is_default = 0 ; 

但不幸的是,SSMS 返回给我:

Msg 14607, Level 16, State 1, Procedure sysmail_verify_principal_sp, Line 49 [Batch Start Line 0]
principal name is not valid

错误明显在线

@principal_name = 'ASPIRES3\franc', 

但我不明白这有什么问题

sql-server t-sql
  • 1 个回答
  • 1073 Views
Martin Hope
Francesco Mantovani
Asked: 2018-02-26 22:32:19 +0800 CST

SSRS:http://localhost/ReportServer 可访问但未列出报告

  • 0

我以正确的方式在 Windows 10 上部署了 SSRS,我认为至少可以在 Internet Explorer 上访问http://localhost/ReportServer 。

如下图所示:

  • 我使用 SQL Server Data Tools 创建了一个报告
  • 报告在那里,我也可以看到预览
  • 目标服务器 URL 是http://localhost/ReportServer
  • 但是如果访问http://localhost/ReportServer就没有报告

这怎么可能?

在此处输入图像描述

sql-server ssrs
  • 1 个回答
  • 675 Views
Martin Hope
Francesco Mantovani
Asked: 2018-02-20 13:51:26 +0800 CST

sp_helpdb:CONVERT 如何创建 DATETIME

  • -1

我喜欢sp_helpdb,它让我有机会了解全局。

我发现了一个显示如何轻松编辑它的博客。

顺便说一句,我想按创建日期排序结果。为此,我必须将“已创建”列从 CONVERT 转换Apr 7 2017为2017-04-07 00:00:00.

所以我插入sp_helpdb到一个临时表中,但我的转换 ( CONVERT(VARCHAR(10),created,120)) 不起作用:

CREATE TABLE #db_details (name nvarchar(128), db_size nvarchar(50),owner nvarchar(128),db_id int,created varchar(128),status nvarchar(2000),compatibility_level int)

INSERT INTO #db_details EXEC sp_helpdb
SELECT *
FROM #db_details
ORDER BY  CONVERT(VARCHAR(10),created,120) asc

DROP TABLE #db_details

我正在遵循一个非常简单的指南!我哪里错了?

sql-server datetime
  • 2 个回答
  • 200 Views
Martin Hope
Francesco Mantovani
Asked: 2017-09-14 16:26:47 +0800 CST

SQL Server:如何以人类可读的格式设置时间

  • -3

我在这里找到了这个有用的查询,我用它来监视 SQL Server 作业。

SELECT
sJobHis.[server],
sJobStep.database_name,
SJob.name,
SJob.enabled,
CASE WHEN SJob.enabled = 0 THEN '0'
WHEN sJobStep.subsystem = 'TSQL' AND sJobStep.command LIKE '%--%' 
AND AVG(CAST(SUBSTRING(STUFF(
            STUFF(RIGHT('000000' + CAST([sJobHis].[run_duration] AS VARCHAR(6)),  6)
                , 3, 0, ':')
            , 6, 0, ':') ,7,2) AS INT)) < 1 THEN '0'
WHEN sJobStep.subsystem = 'TSQL' AND sJobStep.command LIKE '%*/%'
AND AVG(CAST(SUBSTRING(STUFF(
            STUFF(RIGHT('000000' + CAST([sJobHis].[run_duration] AS VARCHAR(6)),  6)
                , 3, 0, ':')
            , 6, 0, ':') ,7,2) AS INT)) < 1
 THEN '0'
ELSE '1' END AS  [ActiveStep],
sLogin.name [JobOwner],
sJobHis.step_id,
sJobHis.step_name,
sJobStep.subsystem AS [CommandType],
sJobStep.command AS [Command],
sJobHis.run_date,
[sJobSch].next_run_time AS [Scheduled_Time],
--sJobHis.run_time,
--sJobHis.run_duration,
AVG( CAST( SUBSTRING(STUFF(
            STUFF(RIGHT('000000' + CAST([sJobHis].[run_duration] AS VARCHAR(6)),  6)
                , 3, 0, ':')
            , 6, 0, ':') ,4,2)AS INT))
       AS [AvgRunDuration_In_Min], 
AVG(CAST(SUBSTRING(STUFF(
            STUFF(RIGHT('000000' + CAST([sJobHis].[run_duration] AS VARCHAR(6)),  6)
                , 3, 0, ':')
            , 6, 0, ':') ,7,2) AS INT))
       AS [AvgRunDuration_In_Sec],
COUNT(*) AS [PerDay]
FROM sysjobs AS [SJob] 
LEFT JOIN sysjobhistory AS [sJobHis] ON SJob.job_id = sJobHis.job_id
LEFT JOIN sysjobsteps AS [sJobStep] ON sJobHis.job_id = sJobStep.job_id AND sJobHis.step_id = sJobStep.step_id
INNER JOIN master.dbo.syslogins [sLogin] ON SJob.owner_sid = sLogin.sid
INNER JOIN dbo.sysjobschedules [sJobSch] ON SJob.job_id = [sJobSch].job_id
WHERE  SJob.[enabled]=0 OR ( sJobHis.step_id > 0  AND (sJobHis.run_date > 20131002 AND sJobHis.run_date < 20131005)) 
GROUP BY sJobHis.[server],
sJobStep.database_name,
SJob.name,
SJob.enabled,
sLogin.name ,
sJobHis.step_id,
sJobHis.step_name,
sJobStep.subsystem ,
sJobStep.command ,
sJobHis.run_date,
[sJobSch].next_run_time
ORDER BY SJob.enabled DESC, SJob.name, sJobHis.run_date DESC

我喜欢全面了解我的服务器上发生的事情购买有两列对我来说毫无意义:

在此处输入图像描述

我希望有专栏Scheduled_Time和Running_Time更多的“人类可读性”,因为有时我无法弄清楚他们在说什么。

我有时会看到Scheduled_Timeas92000或121200,但我不知道那是什么意思。

Running_Time有时显示120700或的相同问题20000。

不知道那是什么意思。

我不需要看到失败的工作

我已经拥有的查询是完美的,我只想将这两列格式化为更具可读性的输出

sql-server jobs
  • 2 个回答
  • 775 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