Added new scripts and changes

This commit is contained in:
2024-12-24 15:33:41 +01:00
parent a0c7d14a63
commit 9052475370
18 changed files with 11313 additions and 7 deletions

View File

@@ -0,0 +1,24 @@
with cteFilteredSize as (
SELECT d.[Server Name]
,sum(d.[UsedSpaceMB]) as filteredInstanceMBUsed
FROM [dbo].[octpdba-931-detail] [d]
WHERE d.[toIgnore]=0
GROUP BY d.[server Name]
)
,cteUnfilteredSize as (
SELECT d.[Server Name]
,sum(d.[UsedSpaceMB]) as unfilteredInstanceMBUsed
FROM [dbo].[octpdba-931-detail] [d]
GROUP BY d.[server Name]
)
,cteCurrentSize as (
select g.[Server Name], sum(g.[SpaceUsedMB]) currentMbUsed
from dbo.[octpdba-931-global] g
GROUP BY g.[Server Name]
)
SELECT f.[Server Name], f.[filteredInstanceMBUsed], uf.[unfilteredInstanceMBUsed], c.[currentMbUsed]
FROM [cteFilteredSize] f
INNER JOIN [cteUnfilteredSize] uf on uf.[Server Name] = f.[Server Name]
INNER JOIN [cteCurrentSize] c on [c].[Server Name] = f.[Server Name]
ORDER BY f.[Server Name]

View File

@@ -0,0 +1,81 @@
IF OBJECT_ID('tempdb..#toUpdate') IS NOT NULL
BEGIN
DROP TABLE [#toUpdate];
END
/*Reset flag toIgnore*/
UPDATE [dbo].[octpdba-931-detail]
SET [octpdba-931-detail].[toIgnore]=0;
/*Search for the group that has the smallest number of pharmacies*/
DECLARE @cntLimit INT;
WITH [cteInstances] AS (
SELECT [g].[Server Name],
CASE
WHEN [g].[Server Name] LIKE 'ama%' THEN 'ama'
WHEN [g].[Server Name] LIKE 'swama%' THEN 'ama'
WHEN [g].[Server Name] LIKE 'cvi%' THEN 'cvi'
WHEN [g].[Server Name] LIKE 'swcvi%' THEN 'cvi'
WHEN [g].[Server Name] LIKE 'sun%' THEN 'sun'
WHEN [g].[Server Name] LIKE 'swsun%' THEN 'sun'
WHEN [g].[Server Name] LIKE 'swprd%' THEN 'central'
ELSE 'unknown' END AS [customer]
FROM [dbo].[octpdba-931-global] [g]
GROUP BY [g].[Server Name]
),
[cteCnt] AS (
SELECT [cteInstances].[customer], COUNT(1) AS [cnt]
FROM [cteInstances]
GROUP BY [cteInstances].[customer]
)
SELECT @cntLimit = MIN([cnt])
FROM [cteCnt]
WHERE [cteCnt].[customer] IN ('sun', 'cvi', 'ama')
/*Every table that is present in less than 90 pharmacies is deemed as to be ignored (phcy count: ama=215, sun=91, cvi=92)*/
SELECT [d].[schemaName],
[d].[TableName],
[d].[dbName],
COUNT(1) AS [cnt]
INTO [#toUpdate]
FROM [dbo].[octpdba-931-detail] [d]
WHERE [d].[serverName] != 'swprddb01.centralinfra.net\APSSQL'
AND [d].[TableName] NOT LIKE 'TT%'
AND [d].[TableName] NOT LIKE 'LD[_]%'
GROUP BY [d].[schemaName],
[d].[TableName],
[d].[dbName]
HAVING COUNT(1) < @cntLimit
ORDER BY [cnt] DESC
/*All tables in the activePos* databases are considered to be taken in account*/
UPDATE [d]
SET [d].[toIgnore] = 0
FROM [dbo].[octpdba-931-detail] [d]
INNER JOIN [#toUpdate] [t] ON [t].[TableName] = [d].[TableName] AND [t].[schemaName] = [d].[schemaName] AND [t].[dbName] = [d].[dbName]
WHERE [d].[dbName] NOT LIKE 'activepos%'
AND [d].[toIgnore] = 1;
/*All tables in the DEL schema are ignored*/
UPDATE [d]
SET [d].[toIgnore] = 1
FROM [dbo].[octpdba-931-detail] [d]
WHERE [d].[schemaName] = 'del'
AND [d].[toIgnore] = 0;
SELECT [d].[schemaName],
[d].[TableName],
[d].[dbName],
COUNT(1) AS [cnt]
FROM [dbo].[octpdba-931-detail] [d]
WHERE [d].[toIgnore] = 01
GROUP BY [d].[schemaName],
[d].[TableName],
[d].[dbName]
--HAVING COUNT(1) < 300
ORDER BY [cnt],
[d].[dbName],
[d].[schemaName],
[d].[TableName] DESC

View File

@@ -0,0 +1,149 @@
/*=============================================================================
Fetch total db size and list every tables size in a selected list of dbs
Parameters
----------------------
Context
----------------------
in all pharmacies and central
Creation : 24.12.2024 / TSC
Modifications:
=============================================================================*/
--#region db list
DECLARE @q NVARCHAR(MAX);
DECLARE @dbFilter TABLE(dbName VARCHAR(255)NOT null);
INSERT INTO @dbFilter
(
[dbName]
)
SELECT d.[name]
FROM sys.databases d
WHERE d.[name] LIKE 'activePos%'
OR
d.[name] IN (
'arizona'
,'arizonaCust'
,'arizonaLd'
)
IF OBJECT_ID('tempdb..#tblSize')IS NOT NULL BEGIN;
DROP TABLE #tblSize;
END;
IF OBJECT_ID('tempdb..#dbs')IS NOT NULL BEGIN
DROP TABLE #dbs;
END
CREATE TABLE #tblSize ( [serverName] nvarchar(128), [dbName] nvarchar(128), [schemaName] nvarchar(128), [TableName] nvarchar(128), [RowCounts] bigint, [TotalSpaceMB] decimal(26,6), [UsedSpaceMB] decimal(26,6), [DataSpaceMB] decimal(26,6) )
CREATE TABLE #dbs ( [database_name] NVARCHAR(128) NOT NULL, [log_size_mb] DECIMAL(18,2) NOT NULL, [row_size_mb] DECIMAL(18,2) NOT NULL, [total_size_mb] DECIMAL(18,2) NOT NULL );
INSERT INTO [#dbs] ([database_name], [log_size_mb], [row_size_mb], [total_size_mb])
SELECT
[database_name] = DB_NAME(f.[database_id])
, log_size_mb = CAST(SUM(CASE WHEN f.[type_desc] = 'LOG' THEN [F].[size] ELSE 0 END) * 8. / 1024 AS DECIMAL(18,2))
, row_size_mb = CAST(SUM(CASE WHEN f.[type_desc] = 'ROWS' THEN [F].[size] ELSE 0 END) * 8. / 1024 AS DECIMAL(18,2))
, total_size_mb = CAST(SUM([F].[size]) * 8. / 1024 AS DECIMAL(18,2))
FROM [sys].[master_files] F
JOIN @dbFilter df ON df.[dbName] = DB_NAME(f.[database_id])
GROUP BY F.[database_id]
ORDER BY [total_size_mb] DESC;
--#endregion db list
--#region db size
IF OBJECT_ID('tempdb..#FileSize')IS NOT NULL BEGIN;
DROP TABLE #FileSize;
END;
CREATE TABLE #FileSize(
[dbname] NVARCHAR(128) NOT NULL,
[filename] NVARCHAR(128) NOT NULL,
[type_desc] NVARCHAR(128) NOT NULL,
CurrentSizeMB DECIMAL(10,2) NOT NULL,
FreeSpaceMB DECIMAL(10,2) NULL
);
INSERT INTO #FileSize([dbname], [filename], [type_desc], CurrentSizeMB, FreeSpaceMB)
EXECUTE sp_msforeachdb
'use [?];
SELECT DB_NAME() AS DbName,
name AS FileName,
type_desc,
size/128.0 AS CurrentSizeMB,
size/128.0 - CAST(FILEPROPERTY(name, ''SpaceUsed'') AS INT)/128.0 AS FreeSpaceMB
FROM sys.database_files
WHERE type IN (0,1);';
--#endregion db size
--#region db size
SELECT
d.[name] AS [dbname]
,f.[physical_name] AS physicalFileName
,f.[name] AS logicalFileName
,CAST(f.SIZE * 8. / 1024 AS DECIMAL(18,2)) AS fileSizeMB
,fs.[FreeSpaceMB] AS FreeSpaceInFileMB
,fs.[CurrentSizeMB] - fs.[FreeSpaceMB] AS SpaceUsedMB
,CAST((fs.[CurrentSizeMB] - fs.[FreeSpaceMB]) * 100 / (CAST(f.SIZE * 8. / 1024 AS DECIMAL(18,2))) AS NUMERIC(6,2)) AS fileSpaceUsedPercent
,d2.[total_size_mb] AS totalDbSizeMB
FROM [sys].[master_files] F
JOIN [sys].[databases] d ON d.[database_id] = f.[database_id]
JOIN [#dbs] [d2] ON d2.[database_name] = d.[name]
LEFT JOIN [#FileSize] fs ON fs.[FileName] = f.[name] AND fs.[dbName] = d.[name]
WHERE f.[type_desc] IN (
'ROWS' --mdf
)
ORDER BY [d].[name] DESC, f.[name] ASC ;
--#endregion db size
--#region tables list
SET @q ='';
DECLARE @tplTbl NVARCHAR(MAX)='
USE @db@
INSERT INTO #tblSize(
[serverName],
[dbName],
[schemaName] ,
[TableName] ,
[RowCounts] ,
[TotalSpaceMB] ,
[UsedSpaceMB] ,
[DataSpaceMB]
)
SELECT @@SERVERNAME as serverName,
DB_NAME() as dbName,
SCHEMA_NAME(t.schema_id) as schemaName,
t.name AS TableName,
MAX([p].[rows]) AS RowCounts,
(SUM([a].[total_pages]) * 8) / 1024.0 AS TotalSpaceMB,
(SUM([a].[used_pages]) * 8) / 1024.0 AS UsedSpaceMB,
(SUM([a].[data_pages]) * 8) / 1024.0 AS DataSpaceMB
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 i.object_id > 255
--AND i.index_id IN ( 0, 1 )
GROUP BY t.name, t.schema_id
ORDER BY TotalSpaceMB DESC;
';
SELECT @q = @q + REPLACE(@tplTbl, '@db@', [dbName])
FROM @dbFilter;
--PRINT @q
EXEC [sys].[sp_executesql]
@q
,N''
;
SELECT *
FROM [#tblSize]
--#endregion tables list