Special thanks to Analytics Vidhya
2016-10-18
2016-08-23
2016-08-09
About-R_SqlServerAnalysis
SQL-Rstats
ODBC Configuration
Create a System ODBCto be used locally
in your system
with the correct user and password.
Turn it ANSI compliant
Set log paths
Get summary
Test ODBC
R
Configuration
Microsoft R Server
Platformshttps://msdn.microsoft.com/en-us/microsoft-r/rserver-install-supported-platforms
Download
https://msdn.microsoft.com/en-us/microsoft-r/rserver-install-windows
Install
https://myprodscussu1.app.vssubscriptions.visualstudio.com/Downloads?PId=1962
http://marlonribunal.com/how-to-install-microsoft-r-server-for-windows/
Microsoft R Engine-Server
Microsoft Open for Revolution R Enterprise a.k.a. RRE : MRO-3.2.2-for-RRE-8.0.0-Windows
R IDE
IDE
Revolution R Enterprise a.k.a. RRE
Revolution-R-Enterprise-8.0.0-Windows
Microsoft
R Open
Microsoft R Engine-Open
MRO downloads at https://mran.revolutionanalytics.com/download/MRO-3.2.5-win or later https://mran.revolutionanalytics.com/install/mro/3.3.0/MRO-3.3.0-win.exe
RevoMath-3.2.5 or later https://mran.revolutionanalytics.com/install/mro/3.3.0/RevoMath-3.3.0.exe
R
IDE
RStudio
for MRO or MRS
RStudio-0.99.491 or more recent at https://www.rstudio.com/products/rstudio/download2/
VS2015 for
MRO or MRS
Visual Studio 2015 https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspxCumminty https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx
Microsoft R Start Guide
https://msdn.microsoft.com/microsoft-r/microsoft-r-getting-started
Microsoft
R Client
It is an universal clienthttps://msdn.microsoft.com/microsoft-r/install-r-client-windows
Power
BI
Installation at http://marlonribunal.com/getting-started-with-power-bi-desktop-installation/Cloud at https://powerbi.microsoft.com/
Mobile at https://powerbi.microsoft.com/mobile
Desktop at https://powerbi.microsoft.com/desktop
Project Architecture
SQL-Scripts
Server Info List
SQL
ServerInfoListSQL
-- SQL Server Instance
Select @@SERVERNAME AS SQLServerInstance;
-- SQL Server Version
Select @@VERSION AS SQLServerVersion;
-- SQL Server Service
Select @@ServiceName AS ServiceInstance;
R
ServerInfoListR
# Server info
serverInstance <- sqlQuery(simmqODBC, "Select @@SERVERNAME AS SQLServerInstance;");
serverVersion <- sqlQuery(simmqODBC, "Select @@VERSION AS SQLServerVersion;");
serverService <- sqlQuery(simmqODBC, "Select @@ServiceName AS ServiceInstance;");
Output
ServerInfoListOUT
> serverInstance <- sqlQuery(simmqODBC, "Select @@SERVERNAME AS SQLServerInstance;");
W2K8MMQSQL01
> serverVersion <- sqlQuery(simmqODBC, "Select @@VERSION AS SQLServerVersion;");
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
> serverService <- sqlQuery(simmqODBC, "Select @@ServiceName AS ServiceInstance;");
MSSQLSERVER
Server
Resources List
SQL
ServerResourcesListSQL
SELECT
*
FROM sys.dm_os_sys_info
;
R
ServerResourcesListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_sys_info;");
Server Memory Cache Counter List
SQL
ServerMemoryCacheCounterListSQL
SELECT
*
FROM sys.dm_os_memory_cache_counters
ORDER BY
single_pages_kb DESC
, multi_pages_kb DESC
, entries_count DESC
;
R
ServerMemoryCacheCounterListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_memory_cache_counters ORDER BY single_pages_kb DESC, multi_pages_kb DESC, entries_count DESC;");
Server Memory Cache Entry List
SQL
ServerMemoryCacheEntryListSQL
SELECT
*
FROM sys.dm_os_memory_cache_entries
ORDER BY
disk_ios_count DESC
, original_cost DESC
, current_cost DESC
, in_use_count DESC
, context_switches_count DESC
, pages_allocated_count DESC
;
R
ServerMemoryCacheEntryListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_memory_cache_entries ORDER BY disk_ios_count DESC, original_cost DESC, current_cost DESC, in_use_count DESC, context_switches_count DESC, pages_allocated_count DESC;");
Server Memory Cache Hash Table List
SQL
ServerMemoryCacheHashTableListSQL
SELECT
*
FROM sys.dm_os_memory_cache_hash_tables
ORDER BY
buckets_count DESC
, buckets_in_use_count DESC
, hits_count DESC
, misses_count DESC
;
R
ServerMemoryCacheHashTableListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_memory_cache_hash_tables ORDER BY buckets_count DESC, buckets_in_use_count DESC, hits_count DESC, misses_count DESC;");
Server Memory Cache Clock Hand List
SQL
ServerMemoryCacheClockHandListSQL
SELECT
*
FROM sys.dm_os_memory_cache_clock_hands
ORDER BY
[type] DESC
, rounds_count DESC
, removed_all_rounds_count DESC
, clock_hand DESC
;
R
ServerMemoryCacheClockHandListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_memory_cache_clock_hands ORDER BY [type] DESC, rounds_count DESC, removed_all_rounds_count DESC, clock_hand DESC;");
Server
Memory Node List
SQL
ServerMemoryNodeListSQL
SELECT
*
FROM sys.dm_os_memory_nodes
;
R
ServerMemoryNodeListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_memory_nodes;");
Server
Memory Clerk List
SQL
ServerMemoryClerkListSQL
SELECT
*
FROM sys.dm_os_memory_clerks
ORDER BY
memory_node_id ASC
, single_pages_kb DESC
, multi_pages_kb DESC
, virtual_memory_committed_kb DESC
, virtual_memory_reserved_kb DESC
;
R
ServerMemoryClerkListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_memory_clerks ORDER BY memory_node_id ASC, single_pages_kb DESC, multi_pages_kb DESC, virtual_memory_committed_kb DESC, virtual_memory_reserved_kb DESC;");
Server Memory
Object List
SQL
ServerMemoryObjectListSQL
SELECT
*
FROM sys.dm_os_memory_objects
ORDER BY
pages_allocated_count DESC
, memory_node_id DESC
, max_pages_allocated_count DESC
;
R
ServerMemoryObjectListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_memory_objects ORDER BY pages_allocated_count DESC, memory_node_id DESC, max_pages_allocated_count DESC;");
Server Performance Counter List
SQL
ServerPerformanceCounterListSQL
SELECT
*
FROM sys.dm_os_performance_counters
ORDER BY
instance_name ASC
, cntr_value DESC
, cntr_type DESC
;
R
ServerPerformanceCounterListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_performance_counters ORDER BY instance_name ASC, cntr_value DESC, cntr_type DESC;");
Server
Ring Buffer List
SQL
ServerRingBufferListSQL
SELECT
*
FROM sys.dm_os_ring_buffers
ORDER BY
timestamp DESC
, ring_buffer_type ASC
;
R
ServerRingBufferListR
sqlQuery(simmqODBC, "SELECT * FROM sys.dm_os_ring_buffers ORDER BY timestamp DESC, ring_buffer_type ASC;");
Server
Running List
SQL
ServerRunningListSQL
SELECT @@SERVERNAME AS ServerName
, @@SERVICENAME AS ServiceName
, create_date AS ServerStarted
, name AS DBName
, DATEDIFF(s, create_date, GETDATE()) / 86400.0 AS DaysRunning
FROM sys.databases
;
R
ServerRunningListR
# Server Running
sqlFile <- "SQL/DB-ServerRunning_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, serverInstance));
Output
W2K8MMQSQL01-PROD-DB-ServerRunning_list-2016-07-19_10h38.csv
Server
Linked List
SQL
ServerLinkedListSQL
-- servers linked
SELECT @@SERVERNAME AS ServerName
, Server_Id AS LinkedServerID
, name AS LinkedServer
, Product
, Provider
, Data_Source AS DataSource
, Modify_Date AS ModificationDate
, is_linked AS IsLinked
FROM sys.servers
ORDER BY
LinkedServer
;
R
ServerLinkedListR
# Server Linked
sqlFile <- "SQL/DB-ServerLinked_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, serverInstance));
Output
W2K8MMQSQL01-PROD-DB-ServerLinked_list-2016-07-19_10h38.csv
Server
DB Spec List
SQL
ServerDBSpecListSQL
SELECT @@SERVERNAME AS ServerName
, @@SERVICENAME AS ServiceName
, d.database_id AS DBIdentifier
, d.name AS DBName
, m.name AS OriginalDBName
, recovery_model_Desc AS RecoveryModel
, Compatibility_level AS CompatiblityLevel
, m.size AS DBSize
, m.growth AS DBGrowth
, m.is_percent_growth AS IsPercentGrowth
, create_date AS CreatedDate
, d.state_desc AS CurrentState
, is_auto_shrink_on AS AutoShrink
, snapshot_isolation_state_desc AS SnapshotState
, is_auto_update_stats_on AS IsAutoUpdate
, is_arithabort_on AS IsArithAbort
, page_verify_option_desc AS PageVerifyOption
, collation_name AS Collation
, m.physical_name AS FilePath
, source_database_id AS IdSourceDB
FROM
sys.databases AS d
JOIN
sys.master_files AS m
ON d.database_id = m.database_id
WHERE m.[type] = 0 -- data files only
ORDER BY
DBName
;
R
ServerDBSpecListR
# Server DB spec
sqlFile <- "SQL/DB-ServerDBSpec_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, serverInstance));
Output
W2K8MMQSQL01-PROD-DB-ServerDBSpec_list-2016-07-19_10h38.csv
Server
DB Backup List
SQL
ServerBackupListSQL
-- server DBs backup
SELECT @@SERVERNAME AS ServerName
, @@SERVICENAME AS ServiceName
, d.Name AS DBName
, b.Backup_finish_date
, bmf.Physical_Device_name
FROM
sys.databases AS d
LEFT OUTER JOIN
msdb..backupset AS b
ON
b.database_name = d.name
AND
b.[type] = 'D'
LEFT OUTER JOIN
msdb.dbo.backupmediafamily AS bmf
ON
b.media_set_id = bmf.media_set_id
ORDER BY
d.Name
;
R
ServerBackupListR
# Server DB Backup
sqlFile <- "SQL/DB-ServerDBBackup_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, serverInstance));
Output
W2K8MMQSQL01-PROD-DB-ServerDBBackup_list-2016-07-19_10h38.csv
Server
DB Usage List
SQL
ListCounterValues
SELECT --@total_buffer = cntr_value
cntr_value AS CounterValue
FROM sys.dm_os_performance_counters AS CNTRS
WHERE RTRIM([object_name])
LIKE '%Buffer Manager'
AND counter_name = 'Total Pages'
;
DatabasesUsages
SELECT database_id AS DBIdentifier
, CASE [database_id]
WHEN 32767
THEN 'Resource DB'
ELSE DB_NAME([database_id])
END AS DBName
, COUNT_BIG(*) AS DBBufferPages
, COUNT_BIG(*) / 128 AS DBBufferMB
FROM sys.dm_os_buffer_descriptors --WHERE database_id BETWEEN 5 AND 32766
GROUP BY
database_id
;
R
DatabasesUsagesR
## DB Usage
# DB usage list
sqlFile <- "SQL/DB-Usage_list.sql";
sqlDataFrame <- SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile));
DataFrameToCsv(sqlDataFrame,
SqlFileToCsv(sqlFile, dbInstance));
# DB usage barplot
DBUsageDataFrameToBarplot(sqlDataFrame,
SqlFileToPng(sqlFile, dbInstance, "-Barplot"));
DBUsageDataFrameToPiechart(sqlDataFrame,
SqlFileToPng(sqlFile, dbInstance, "-Piechart"));
Output
W2K8MMQSQL01-PROD-DB-Usage_list-2016-07-19_11h16.csv
DatabasesUsagesOUT
> dbUsageDataFrame
DBIdentifier DBName DBBufferPages DBBufferMB
1 1 master 128 1
2 3 model 50 0
3 14 TEMPDocumentDatabase 52 0
4 5 ReportServer 135 1
5 6 ReportServerTempDB 65 0
6 7 mmq 713303 5572
7 8 Claims_MMQ 240078 1875
8 22 mmqtrace 60 0
9 2 tempdb 10506 82
10 4 msdb 3087 24
11 18 GAA_RiskLocation 53 0
12 32767 Resource DB 2800 21
SQL-Model
DB static data
Performance Analysis with Activity Monitor
https://www.mssqltips.com/sqlservertip/1917/performance-analysis-using-sql-server-2008-activity-monitor-tool/
Parameter List for Procedures and Functions
SQL
DB-ParametersInFuncsAndProcs.sql
ListAllParametersFromProceduresAndFunctions
SELECT
SYSO.[name] AS ObjectName
,SCHEMA_NAME(SCHEMA_ID) AS SchemaName
,SYSO.type_desc AS ObjectTypeDesc
,SYSP.parameter_id AS ParameterID
,SYSP.[name] AS ParameterName
,TYPE_NAME(SYSP.user_type_id) AS ParameterType
,SYSP.max_length AS ParameterMaxLength
,SYSP.[precision] AS ParameterPrecision
,SYSP.max_length AS ParamMaxBytes
,SYSP.scale AS ParameterScale
,SYSP.is_output AS IsParameterOutput
FROM sys.objects AS SYSO
INNER JOIN
sys.parameters
AS SYSP
ON SYSO.object_id = SYSP.object_id
ORDER BY
ObjectName, ObjectTypeDesc, ParameterID
;
R
ListAllParametersFromPRoceduresAndFunctionsR
## DB All parameter
# DB All parameter list
sqlFile <- "SQL/DB-ParametersInFuncsAndProcs.sql";
allParametersDataFrame <- SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile));
DataFrameToCsv(allParametersDataFrame,
SqlFileToCsv(sqlFile, dbInstance));
Object List
SQL
DB-Object_list.sql
ListObjects
SELECT
CASE TYPE
WHEN 'U'
THEN 'User Defined Tables'
WHEN 'S'
THEN 'System Tables'
WHEN 'IT'
THEN 'Internal Tables'
WHEN 'P'
THEN 'Stored Procedures'
WHEN 'PC'
THEN 'CLR Stored Procedures'
WHEN 'X'
THEN 'Extended Stored Procedures'
WHEN 'FN'
THEN 'Function-Scalar'
WHEN 'TF'
THEN 'Function-TabValued'
WHEN 'IF'
THEN 'Function-InlineTabValued'
WHEN 'V'
THEN 'Views'
END AS ObjectName
, COUNT(*) AS ObjectCount
FROM SYS.OBJECTS
WHERE TYPE IN ('U', 'P', 'PC', 'S', 'IT', 'X', 'FN', 'TF', 'IF', 'V')
GROUP BY
[type]
;
R
ObjectListR
## DB Object
# DB object list
sqlFile <- "SQL/DB-Object_list.sql";
ObjectListDataFrame <- SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile));
DataFrameToCsv(ObjectListDataFrame,
SqlFileToCsv(sqlFile, dbInstance));
# DB object list sum fonctions
ObjectSumDataFrame <- SummarizeDBFunctionDataFrame(ObjectListDataFrame, "Function");
DBObjectDataFrameToBarplot(ObjectSumDataFrame,
SqlFileToPng(sqlFile, dbInstance, "-Sum_Barplot"));
# DB object list all fonctions
objectAllDataFrame <- SummarizeAllDBFunctionDataFrame(ObjectListDataFrame, "Function");
DBFunctionDataFrameToBarplot(objectAllDataFrame,
SqlFileToPng(sqlFile, dbInstance, "-All_Barplot"));
DBFunctionDataFrameToPiechart(objectAllDataFrame,
SqlFileToPng(sqlFile, dbInstance, "-All_Piechart"));
Procedure List
SQL
DB-Procedure_count.sql
CountProcedures
SELECT COUNT(*)
FROM information_schema.routines
WHERE routine_type = 'PROCEDURE'
;
DB-Procedure_list.sql
ListProcedures
SELECT
name AS ProcedureName
, object_id AS ProcedureID
--, SCHEMA_NAME(schema_id) AS SchemaName
, type AS ProcedureType
, type_desc AS ProcedureDesc
, create_date AS ProcedureCreated
, modify_date AS ProcedureModified
, is_ms_shipped AS IsProcedureMSShipped
FROM sys.procedures
ORDER BY
ProcedureName
;
R
ProcedureListR
## DB StoredProc
# DB StoreProc count
sqlFile <- "SQL/DB-Procedure_count.sql";
countStoreProc <- SqlCountResultToInteger(simmqODBC, GetSqlFromFile(sqlFile));
# DB StoreProc list
sqlFile <- "SQL/DB-Procedure_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Procedure List with parameters
SQL
DB-Procedure_listParams.sql
ListProceduresAndParameters
SELECT
SYSO.[name] AS ProcedureName
, SCHEMA_NAME(SCHEMA_ID) AS SchemaName
, SYSO.type AS ProcedureType
, SYSO.type_desc AS ProcedureDesc
, SYSP.parameter_id AS ParameterID
, SYSP.[name] AS ParameterName
, TYPE_NAME(SYSP.user_type_id) AS ParameterType
, SYSP.max_length AS ParamMaxLength
, SYSP.[precision] AS ParameterPrecision
, SYSP.scale AS ParameterScale
, SYSP.is_output AS IsParamOutput
FROM sys.objects AS SYSO
INNER JOIN
sys.parameters AS SYSP
ON SYSO.object_id = SYSP.object_id
WHERE SYSO.type_desc LIKE '%PROCEDURE%'
ORDER BY
ProcedureName, ParameterID, SchemaName
;
R
ProcedureParamListR
# DB StoreProc param list
sqlFile <- "SQL/DB-Procedure_listParams.sql";
storedProcParamDataFrame <- SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile));
DataFrameToCsv(storedProcParamDataFrame,
SqlFileToCsv(sqlFile, dbInstance));
storedProcParamDataFrameSlim <- DataFrameFromColumns(storedProcParamDataFrame,
"ProcedureName",
"ProcedureType",
"ProcedureDesc");
# DB StoreProc repeat count
storedProcParamDataFrameFat <- aggregate(list(NbParameters = rep(1, nrow(storedProcParamDataFrameSlim))),
storedProcParamDataFrameSlim,
length);
write(summary(rev(storedProcParamDataFrameFat)[1]), stdout());
# DB StoreProc with params
countStoreProcWith <- nrow(storedProcParamDataFrameFat);
# DB StoreProc without params
countStoreProcWithout <- countStoreProc - countStoreProcWith;
# DB StoreProc data frame params
storeProcParamsDF <- DataFrameWithoutWithTotal(countStoreProcWithout,
countStoreProcWith,
countStoreProc,
"StoreProc");
# DB StoreProc param list export
DataFrameToCsv(storeProcParamsDF,
SqlFileToCsv(sqlFile, dbInstance, "-Procs_Specs"));
# DB StoreProc barplot
StoredProcWithoutWithTotalDFToBarplot(storeProcParamsDF,
SqlFileToPng(sqlFile, dbInstance, "-Procs_Barplot"),
"StoredProc");
# DB StoreProc boxplot
DBStoreProcDataFrameToBoxplot(storedProcParamDataFrameFat,
SqlFileToPng(sqlFile, dbInstance, "-Procs_Boxplot"));
# DB StoreProc density plot
DBStoreProcDataFrameToDensityplot(storedProcParamDataFrameFat,
SqlFileToPng(sqlFile, dbInstance, "-Procs_Densityplot"));
DB List
SQL
DBRowCountSQL
CREATE TABLE #rowcount
( TableName VARCHAR(128) ,
Rowcnt INT )
;
EXEC sp_MSforeachtable 'insert into #rowcount select ''?'', count(*) from ?'
;
SELECT TableName
, Rowcnt
FROM #rowcount
ORDER BY Tablename ,
Rowcnt DESC
;
DROP TABLE #rowcount
;
R
DBRowCountR
## DB Table Count
# DB Table Count DROP
sqlQuery(simmqODBC, "IF OBJECT_ID(N'#counts', N'U') IS NOT NULL DROP TABLE #counts;")
# DB TABLE Count CREATE
sqlQuery(simmqODBC, "CREATE TABLE #counts (TableName VARCHAR(255), TableRows INT);");
# DB Table Count EXEC
sqlQuery(simmqODBC, "EXEC sp_MSForEachTable @command1='INSERT #counts (TableName, TableRows) SELECT ''?'', COUNT(*) FROM ?';");
# DB Table Count CSV
sqlFile <- "SQL/DB-RowCount_list.sql";
tableRowCountDataFrame <- SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile));
DataFrameToCsv(tableRowCountDataFrame,
SqlFileToCsv(sqlFile, dbInstance));
# DB Table Count repeats
tableRowCountDataFrame <- aggregate(list(RowRepeats = rep(1, nrow(tableRowCountDataFrame[-1]))),
tableRowCountDataFrame[-1],
length);
# DB Table Count half > mean repeats
aMean <- mean(tableRowCountDataFrame$RowRepeats);
tableRowCountDataFrame <- subset(tableRowCountDataFrame, RowRepeats > aMean);
DBRowCountFrameToBarplot(tableRowCountDataFrame,
SqlFileToPng(sqlFile, dbInstance, "_Barplot"));
# DB Table Count DROP
sqlQuery(simmqODBC, "DROP TABLE #counts;");
Table List
SQL
DB-Table_count.sql
CountTables
SELECT COUNT(*)
FROM sys.tables
;
DB-Table_list.sql
ListTables
SELECT
[name] AS TableName
,object_id AS TableID
,[type] AS TableType
,type_desc AS TableDesc
,create_date AS TableCreated
,modify_date AS TableModified
,max_column_id_used AS MaxColumnIDUsed
,uses_ansi_nulls AS IsUsingANSINulls
,lob_data_space_id AS LOBDataSpaceID
FROM sys.tables
ORDER BY
TableName
;
R
TableListR
## DB Table Analysis
# DB Table Analysis count
sqlFile <- "SQL/DB-Table_count.sql";
countTable <- SqlCountResultToInteger(simmqODBC, GetSqlFromFile(sqlFile));
# DB Table Analysis list
sqlFile <- "SQL/DB-Table_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Table Independent
List-Without Parent & Without Dependents
SQL
DB-TableIndependant_list.sql
TableIndependentListSQL
--Independent tables
SELECT Name AS TableIndependent
, object_id AS TableID
, [type] AS TableType
, type_desc AS TableDesc
, create_date AS TableCreated
, modify_date AS TableModified
, max_column_id_used AS MaxColumnIDUsed
, uses_ansi_nulls AS IsUsingANSINulls
, lob_data_space_id AS LOBDataSpaceID
FROM
sys.tables
WHERE object_id NOT IN
(
SELECT referenced_object_id
FROM sys.foreign_key_columns
) -- Check for parents
AND
object_id NOT IN
(
SELECT parent_object_id
FROM sys.foreign_key_columns
) -- Check for Dependents
ORDER BY
TableIndependent
;
R
TableIndependentListR
# DB Table Analysis Independent
sqlFile <- "SQL/DB-TableIndependent_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Table Trunk List-Without Parent
SQL
DB-TableWithoutParent_list.sql
TableWithoutParentListSQL
-- Top level of the pyramid tables. Tables with no parents. Trunk
SELECT DISTINCT
OBJECT_NAME(referenced_object_id) AS TableTrunkName
FROM
sys.foreign_key_columns
WHERE referenced_object_id NOT IN
(
SELECT parent_object_id
FROM sys.foreign_key_columns
)
ORDER BY
TableTrunkName
;
R
TableTrunkListR
# DB Table Analysis Trunk
sqlFile <- "SQL/DB-TableTrunk_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Table Branch List-With Parent
& With Dependent
SQL
DB-TableParentDependent_list.sql
TableParentDependentListSQL
-- Tables with both parents and dependents.
-- Tables in the middle of the hierarchy. Branches
SELECT DISTINCT
OBJECT_NAME(referenced_object_id) AS TableBranchName
FROM
sys.foreign_key_columns
WHERE referenced_object_id IN
(
SELECT parent_object_id
FROM sys.foreign_key_columns
)
AND
parent_object_id NOT IN
(
SELECT referenced_object_id
FROM sys.foreign_key_columns
)
ORDER BY
TableBranchName
;
R
TableBranchListR
# DB Table Analysis Branch
sqlFile <- "SQL/DB-TableBranch_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Table Leaf List-Without Dependent
SQL
DB-TableWithoutDependent_list.sql
TableWithoutDependantListSQL
-- Bottom level of the pyramid tables.
-- Tables with no dependents. (These are the leaves on a tree.) Leafs
SELECT DISTINCT
OBJECT_NAME(parent_object_id) AS TableLeafName
FROM
sys.foreign_key_columns
WHERE parent_object_id NOT IN
(
SELECT referenced_object_id
FROM sys.foreign_key_columns
)
ORDER BY
TableLeafName
;
R
TableLeafListR
# DB Table Analysis Leaf
sqlFile <- "SQL/DB-TableLeaf_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Table Parent List-With Dependent
SQL
DB-TableDependant_list.sql
TableDependentListSQL
-- Tables with dependencies. Parent
SELECT DISTINCT
OBJECT_NAME(referenced_object_id) AS TableParent
, OBJECT_NAME(parent_object_id) AS TableChild
, OBJECT_NAME(constraint_object_id) AS ForeignKeyName
FROM
sys.foreign_key_columns
ORDER BY
TableParent, TableChild
;
R
TableParentListR
# DB Table Analysis Parent
sqlFile <- "SQL/DB-TableParent_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Table
Child List
SQL
TableParentListSQL
-- Tables with parents. Child
SELECT DISTINCT
OBJECT_NAME(referenced_object_id) AS TableChild
FROM
sys.foreign_key_columns
WHERE parent_object_id NOT IN
(
SELECT referenced_object_id
FROM sys.foreign_key_columns
) -- Check for parents
ORDER BY
TableChild
;
R
TableChildListR
# DB Table Analysis Child
sqlFile <- "SQL/DB-TableChild_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Table Self Ref List-Recursive
SQL
DB-TableRecursive_list.sql
TableRecirsiveListSQL
-- in rare cases, you might find a self-referencing dependent table.
-- Recursive (self) referencing table dependencies.
SELECT DISTINCT
OBJECT_NAME(referenced_object_id) AS ParentTableName
, COL_NAME(referenced_object_id, referenced_column_id) AS ParentColumnName
, OBJECT_NAME(parent_object_id) AS ChildTableName
, COL_NAME(parent_object_id, parent_column_id) AS ChildColumnName
, OBJECT_NAME(constraint_object_id) AS ForeignKeyName
FROM sys.foreign_key_columns
WHERE referenced_object_id = parent_object_id
ORDER BY
ParentTableName, ChildTableName
;
R
TableRecursiveListR
# DB Table Analysis SelfRef
sqlFile <- "SQL/DB-TableSelfRef_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Table
Key List
SQL
DB-Table_listKeys.sql
ListTablesAndColumns
SELECT PKeyTab.TableName,
PKeyTab.PKName,
FKeyTab.FKName,
PKeyTab.ColumnName
FROM (
SELECT TableName,
PKName,
ColumnName
FROM (
SELECT
OBJECT_NAME(parent_object_id) AS PKTableName,
OBJECT_NAME(OBJECT_ID) AS PKName
FROM
sys.objects
WHERE type_desc IN ('PRIMARY_KEY_CONSTRAINT')
)
AS PKTab
LEFT OUTER JOIN
(
SELECT Table_Name AS TableName,
Constraint_Name AS ConstraintName,
Column_Name AS ColumnName
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
)
AS AllTab
ON (
PKTab.PKTableName = AllTab.TableName
AND
PKTab.PKName = AllTab.ConstraintName
)
)
AS PKeyTab
LEFT OUTER JOIN
(
SELECT TableName,
FKName,
ColumnName
FROM
(
SELECT OBJECT_NAME(parent_object_id) AS FKTableName,
OBJECT_NAME(OBJECT_ID) AS FKName
FROM
sys.objects
WHERE type_desc IN ('FOREIGN_KEY_CONSTRAINT')
)
AS FKTab
LEFT OUTER JOIN
(
SELECT Table_Name AS TableName,
Constraint_Name AS ConstraintName,
Column_Name AS ColumnName
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
)
AS AllTab
ON (
FKTab.FKTableName = AllTab.TableName
AND
FKTab.FKName = AllTab.ConstraintName
)
)
AS FKeyTab
ON (
PKeyTab.TableName = FKeyTab.TableName
AND
PKeyTab.ColumnName = PKeyTab.ColumnName
)
ORDER BY
PKeyTab.TableName, PkeyTab.PKName
;
R
TableKeyListR
# DB Table Analysis keys list
sqlFile <- "SQL/DB-Table_listKeys.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
View List
SQL
DB-View_count.sql
CountViews
SELECT COUNT(*)
FROM sys.views
;
DB-View_list.sql
ListViews
SELECT
name AS ViewName
, OBJECT_ID AS ViewID
, type AS ViewType
, type_desc AS ViewDesc
, create_date AS ViewCreated
, modify_date AS ViewModified
, OBJECTPROPERTYEX(object_id,'IsIndexed') AS IsIndexed
, OBJECTPROPERTYEX(object_id,'IsIndexable') AS IsIndexable
FROM sys.views AS SYSV
ORDER BY
ViewName
;
R
ViewListR
## View Analysis
# View Analysis count
sqlFile <- "SQL/DB-View_count.sql";
countView <- SqlCountResultToInteger(simmqODBC, GetSqlFromFile(sqlFile));
# View Analysis list
sqlFile <- "SQL/DB-View_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Function List
SQL
DB-Function_count.sql
CountFunctions
SELECT COUNT(*)
FROM dbo.sysobjects
WHERE [type] IN (
'FN', -- scalar functions
'IF', -- inline table-valued functions
'TF' -- table-valued functions
)
;
DB-Function_count-Scalar.sql
CountScalarFunctions
SELECT COUNT(*)
FROM dbo.sysobjects
WHERE [type] IN (
'FN' -- scalar functions
)
;
DB-Function_count-Inline.sql
CountInlineTableValuedFunctions
SELECT COUNT(*)
FROM dbo.sysobjects
WHERE [type] IN (
'IF' -- inline table-valued functions
)
;
DB-Function_count-Valued.sql
CountTableValuedFunctions
SELECT COUNT(*)
FROM dbo.sysobjects
WHERE [type] IN (
'TF' -- table-valued functions
)
;
DB-Function_list.sql
ListFunctions
SELECT FUNCMO.FunctionName
, FUNCSO.ObjectID AS FunctionID
, FUNCMO.FunctionType
, FUNCMO.FunctionDesc
, FUNCMO.FunctionCreated
, FUNCMO.FunctionModified
FROM
(
SELECT [name] AS FunctionName
--[definition],
,[type] AS FunctionType
,type_desc AS FunctionDesc
,create_date AS FunctionCreated
,modify_date AS FunctionModified
FROM sys.sql_modules AS SYSM
INNER JOIN
sys.objects AS SYSO
ON SYSM.object_id=SYSO.object_id
WHERE type_desc LIKE '%function%'
) AS FUNCMO
INNER JOIN
(
SELECT [name] AS ObjectName
,[id] AS ObjectID
,[type] AS ObjectType
,[crdate] AS ObjectCreated
FROM dbo.sysobjects
WHERE [type] IN (
'FN', -- scalar functions
'IF', -- inline table-valued functions
'TF' -- table-valued functions
)
) AS FUNCSO
ON FUNCMO.FunctionName = FUNCSO.ObjectName
ORDER BY
FUNCMO.FunctionName
;
R
FunctionListR
## Function Analysis
# Function Analysis count
sqlFile <- "SQL/DB-Function_count.sql";
countFunc <- SqlCountResultToInteger(simmqODBC, GetSqlFromFile(sqlFile));
# Function Analysis list
sqlFile <- "SQL/DB-Function_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Function List with parameters
SQL
DB-Function_listParams.sql
ListFunctionsAndParameters
SELECT
SYSO.[name] AS FunctionName
,SCHEMA_NAME(SCHEMA_ID) AS SchemaName
,SYSO.type AS FunctionType
,SYSO.type_desc AS FunctionDesc
,SYSP.parameter_id AS ParameterID
,SYSP.[name] AS ParameterName
,TYPE_NAME(SYSP.user_type_id) AS ParameterType
,SYSP.max_length AS ParamMaxLength
,SYSP.[precision] AS ParameterPrecision
,SYSP.scale AS ParameterScale
,SYSP.is_output AS IsParamOutput
FROM sys.objects AS SYSO
INNER JOIN
sys.parameters AS SYSP
ON SYSO.object_id = SYSP.object_id
WHERE SYSO.type_desc NOT LIKE '%PROCEDURE%'
ORDER BY
FunctionName, FunctionDesc, ParameterID
;
R
FunctionParameterListR
# Function Analysis param list
sqlFile <- "SQL/DB-Function_listParams.sql";
functionParamsDataFrame <- SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile));
DataFrameToCsv(functionParamsDataFrame,
SqlFileToCsv(sqlFile, dbInstance));
fnParamsDataFrameSlim <- DataFrameFromColumns(functionParamsDataFrame,
"FunctionName",
"FunctionType",
"FunctionDesc");
# Function Analysis repeat count
fnParamsDataFrameFat <- aggregate(list(NbParameters = rep(1, nrow(fnParamsDataFrameSlim))),
fnParamsDataFrameSlim,
length);
write(summary(rev(fnParamsDataFrameFat)[1]), stdout());
# Function Analysis without params
countFuncWith <- nrow(fnParamsDataFrameFat);
# Function Analysis without params
countFuncWithout <- countFunc - countFuncWith;
# Function Analysis data frame params
fnParamsDF <- DataFrameWithoutWithTotal(countFuncWithout,
countFuncWith,
countFunc,
"Fn");
# Function Analysis param list export
DataFrameToCsv(fnParamsDF,
SqlFileToCsv(sqlFile, dbInstance, "-Funcs_Specs"));
# Function Analysis barplot
FunctionWithoutWithTotalDFToBarplot(fnParamsDF,
SqlFileToPng(sqlFile, dbInstance, "-Funcs_Barplot"),
"Fn");
# Function Analysis boxplot
DBFunctionDataFrameToBoxplot(fnParamsDataFrameFat,
SqlFileToPng(sqlFile, dbInstance, "-Funcs_Boxplot"));
# Function Analysis density plot
DBFunctionDataFrameToDensityplot(fnParamsDataFrameFat,
SqlFileToPng(sqlFile, dbInstance, "-Funcs_Densityplot"));
Principal Key List
SQL
DB-PKeys_count.sql
CountPrincipalKeyListSQL
SELECT COUNT(*)
FROM
(
SELECT
OBJECT_NAME(parent_object_id) AS PKTableName,
OBJECT_NAME(OBJECT_ID) AS PKName
FROM
sys.objects
WHERE type_desc IN ('PRIMARY_KEY_CONSTRAINT')
)
AS PKTab
LEFT OUTER JOIN
(
SELECT Table_Name AS TableName,
Constraint_Name AS ConstraintName,
Column_Name AS ColumnName
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
)
AS AllTab
ON
(
PKTab.PKTableName = AllTab.TableName
AND
PKTab.PKName = AllTab.ConstraintName
)
;
DB-PKeys_list.sql
PrincipalKeyListSQL
SELECT
PKTab.TableName
, ColumnName
, PrincipalKey
, PrincipalKeyID
, PKCreated
, PKModified
, PKOrdinal
FROM
(
SELECT
OBJECT_NAME(parent_object_id) AS TableName
, OBJECT_NAME(OBJECT_ID) AS PrincipalKey
, OBJECT_ID AS PrincipalKeyID
, create_date AS PKCreated
, modify_date AS PKModified
FROM sys.objects
WHERE type_desc IN ('PRIMARY_KEY_CONSTRAINT')
) AS PKTab
LEFT OUTER JOIN
(
SELECT
Table_Name AS TableName
, Constraint_Name AS ConstraintName
, Column_Name AS ColumnName
, ORDINAL_POSITION AS PKOrdinal
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
) AS AllTab
ON
(
PKTab.TableName = AllTab.TableName
AND
PKTab.PrincipalKey = AllTab.ConstraintName
)
ORDER BY
PKTab.TableName, ColumnName
;
R
PrincipalKeyListR
## PKey Analysis
# PKey Analysis count
sqlFile <- "SQL/DB-PKeys_count.sql";
countPKeys <- SqlCountResultToInteger(simmqODBC, GetSqlFromFile(sqlFile));
# PKey Analysis list
sqlFile <- "SQL/DB-PKeys_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Foreign Key List
SQL
DB-FKeys_count.sql
CountForeignKeys
SELECT COUNT(*)
FROM sys.foreign_key_columns AS fk
JOIN sys.tables AS t
ON fk.parent_object_id = t.object_id
JOIN sys.columns AS c
ON fk.parent_object_id = c.object_id
AND
fk.parent_column_id = c.column_id
;
DB-FKeys_list.sql
ListForeignKeys
SELECT
OBJECT_NAME(SYSFK.parent_object_id) AS TableName
, COL_NAME(FC.parent_object_id, FC.parent_column_id) AS ColumnName
, SYSFK.name AS ForeignKey
, SYSFK.object_id AS ForeignKeyID
, OBJECT_NAME(SYSFK.referenced_object_id) AS ReferenceTableName
, COL_NAME(FC.referenced_object_id, FC.referenced_column_id) AS ReferenceColumnName
, SYSFK.create_date AS FKCreated
, SYSFK.modify_date AS FKModified
, SYSFK.is_not_trusted AS FKnotTrusted
, SYSFK.delete_referential_action_desc AS OnDelete
, SYSFK.update_referential_action_desc AS OnUpdate
FROM sys.foreign_keys AS SYSFK
INNER JOIN
sys.foreign_key_columns AS FC
ON SYSFK.OBJECT_ID = FC.constraint_object_id
ORDER BY
TableName, ColumnName, ForeignKey
;
R
ForeignKeyListR
## FKey Analysis
# FKey Analysis count
sqlFile <- "SQL/DB-FKeys_count.sql";
countFKeys <- SqlCountResultToInteger(simmqODBC, GetSqlFromFile(sqlFile));
# FKey Analysis list
sqlFile <- "SQL/DB-FKeys_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Index List
SQL
DB-Index_count.sqlDB-Index_list.sql
ListIndex
SELECT ISNULL(name,'NA') AS IndexName
, object_id AS IndexID
, type AS IndexType
, type_desc AS IndexDesc
, is_unique AS IsUnique
, is_primary_key AS IsPrimary
, is_unique_constraint AS IsConstraint
, COALESCE(TC.CONSTRAINT_TYPE, 'NA') AS ConstraintType
, data_space_id AS DataSpaceID
, fill_factor AS FillFctr
, allow_page_locks AS CanPageLock
FROM sys.indexes AS SYSI
LEFT OUTER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
ON TC.CONSTRAINT_NAME=SYSI.name
ORDER BY
IndexType, IndexName
;
R
IndexListR
## Index Analysis
# Index Analysis count
sqlFile <- "SQL/DB-Index_count.sql";
countIndex <- SqlCountResultToInteger(simmqODBC, GetSqlFromFile(sqlFile));
# Index Analysis list
sqlFile <- "SQL/DB-Index_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Index List and Types
SQL
DB-Index_listTypes.sql
ListIndexAndType
SELECT
SYSO.name AS TableName
, SYSO.type AS TableType
, SYSO.type_desc AS TableDesc
, COL_NAME(INDC.object_id, INDC.column_id) AS ColumnName
, SYSP.index_id AS TableIndexID
, COALESCE(SYSI.name, 'NA') AS IndexName
, SYSI.object_id AS IndexID
, SYSI.type_desc AS IndexType
, COALESCE(TC.CONSTRAINT_TYPE, 'NA') AS ConstraintType
, SYSA.allocation_unit_id AS AllocUnitID
, INDC.is_included_column AS IsIncludedColumn
FROM sys.partitions AS SYSP
INNER JOIN
sys.allocation_units AS SYSA
ON SYSP.hobt_id = SYSA.container_id
INNER JOIN
sys.objects AS SYSO
ON SYSP.[object_id] = SYSO.[object_id]
INNER JOIN
sys.indexes AS SYSI
ON SYSO.[object_id] = SYSI.[object_id]
AND
SYSP.index_id = SYSI.index_id
INNER JOIN
sys.index_columns AS INDC
ON SYSI.object_id = INDC.object_id
AND
SYSI.index_id = INDC.index_id
LEFT OUTER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
ON TC.CONSTRAINT_NAME=SYSI.name
ORDER BY
TableType, TableName, ColumnName, TableIndexID, IndexName, IndexType
;
R
IndexTypeListR
# Index Analysis type list
sqlFile <- "SQL/DB-Index_listTypes.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
Constraint List
SQL
ConstraintListSQL
--CHECK constriant definitions
SELECT
DB_NAME() AS DBName
, OBJECT_NAME(parent_object_id) AS TableName
, parent_column_id AS ColumnNumber
, COL_NAME(parent_object_id, parent_column_id) AS ColumnName
, Name AS ConstraintName
, type AS ConstraintType
, type_desc AS ConstraintDescription
, create_date AS CreatedDate
, OBJECT_DEFINITION(object_id) AS ConstraintDefinition
, *
FROM sys.Check_constraints
ORDER BY
TableName, ColumnNumber
;
R
ConstraintListR
## Constraint Analysis
# Constraint Analysis List
sqlFile <- "SQL/DB-Constraint_list.sql";
DataFrameToCsv(SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile)),
SqlFileToCsv(sqlFile, dbInstance));
*************
SQL-IO
Footprint List
SQL
DB-Table_listFootprint.sql
ListTablesFootprint
SELECT
SYST.name AS TableName,
SYSI.name AS IndexName,
SYSP.[Rows] AS RecordCount,
sum(SYSA.total_pages) AS TotalPages,
sum(SYSA.used_pages) AS UsedPages,
sum(SYSA.data_pages) AS DataPages,
(sum(SYSA.total_pages) * 8) / 1024 AS TotalSpaceMB,
(sum(SYSA.used_pages) * 8) / 1024 AS UsedSpaceMB,
(sum(SYSA.data_pages) * 8) / 1024 AS DataSpaceMB
FROM sys.tables AS SYST
INNER JOIN
sys.indexes AS SYSI
ON SYST.object_id = SYSI.object_id
INNER JOIN
sys.partitions AS SYSP
ON SYSI.object_id = SYSP.OBJECT_ID
AND SYSI.index_id = SYSP.index_id
INNER JOIN
sys.allocation_units AS SYSA
ON SYSP.partition_id = SYSA.container_id
WHERE
SYST.name NOT LIKE 'dt%'
AND SYSI.OBJECT_ID > 255
AND SYSI.index_id <= 1
GROUP BY
SYST.name, SYSI.object_id, SYSI.index_id, SYSI.name, SYSP.[Rows]
ORDER BY
TableName
;
R
FootprintListR
## DB table footprint
sqlFile <- "SQL/DB-Table_listFootprint.sql";
tableFootprintDataFrame <- SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile));
DataFrameToCsv(tableFootprintDataFrame,
SqlFileToCsv(sqlFile, dbInstance, "-TableFootprint"));
# DB table footprint rm IndexName
colnames(tableFootprintDataFrame);
tableFootprintDataFrame$IndexName <- NULL;
colnames(tableFootprintDataFrame);
# DB table footprint total
countTables <- nrow(tableFootprintDataFrame);
# DB table footprint means
tableWords <- TableFootprintAboveMeans(tableFootprintDataFrame);
# DB table footprint wordcloud
corpusWords <- Corpus(VectorSource(tableWords));
inspect(corpusWords);
termDocMatrixSortDesc <- sort(rowSums(as.matrix(TermDocumentMatrix(corpusWords))),
decreasing=TRUE);
termDocDataFrameSortDesc <- data.frame(word = names(termDocMatrixSortDesc),
freq = termDocMatrixSortDesc);
DataFrameToCsv(termDocDataFrameSortDesc,
SqlFileToCsv(sqlFile, dbInstance, "-TableFootprintSortDesc"));
WordcloudToPng(termDocDataFrameSortDesc,
SqlFileToPng(sqlFile, dbInstance, "-TableFootprintSortDesc"));
TableIO List
SQL
DB-Table_listIO.sql
ListTablesIO
SELECT
object_schema_name(USTAT.object_id) AS ObjectSchema
, object_name(USTAT.object_id) AS [ObjectName]
,CASE
WHEN SUM(User_Updates + User_Seeks + User_Scans + User_Lookups) = 0
THEN NULL
ELSE
CAST(SUM(User_Seeks + User_Scans + User_Lookups) AS DECIMAL)
/ CAST(SUM(User_Updates
+ User_Seeks
+ User_Scans
+ User_Lookups) AS DECIMAL(19,2))
END AS [ReadRatio]
, CASE
WHEN SUM(User_Updates + User_Seeks + User_Scans + User_Lookups) = 0
THEN NULL
ELSE
CAST(SUM(User_Updates) AS DECIMAL)
/ CAST(SUM(User_Updates
+ User_Seeks
+ User_Scans
+ User_Lookups) AS DECIMAL(19,2))
END AS [WriteRatio]
, SUM(User_Seeks + User_Scans + User_Lookups) AS [TotalReads]
, SUM(User_Updates) AS [TotalWrites]
FROM
sys.dm_db_Index_Usage_Stats AS USTAT
JOIN
Sys.Indexes AS SYSI
ON USTAT.object_id = SYSI.object_id
AND USTAT.index_Id = SYSI.index_Id
JOIN sys.tables AS SYST
ON SYST.object_id = USTAT.object_id
WHERE SYSI.Type_Desc IN ( 'Clustered', 'Heap' )
GROUP BY
USTAT.object_id
ORDER BY
object_schema_name(USTAT.object_id) + '.' + object_name(USTAT.object_id)
;
R
TableIOListR
## DB table IO
sqlFile <- "SQL/DB-Table_listIO.sql";
tableIODataFrame <- SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile));
DataFrameToCsv(tableIODataFrame,
SqlFileToCsv(sqlFile, dbInstance, "-TableIO"));
# DB table IO ratio stacked histogram
ioRatioTableDF <- MinimizeTableIO(tableIODataFrame);
DataFrameToCsv(ioRatioTableDF,
SqlFileToCsv(sqlFile, dbInstance, "-TableIORatios"));
# DB table IO stacked plot
DBTableRatioToStackeplot(ioRatioTableDF,
SqlFileToPng(sqlFile, dbInstance, "-TableIORatios"));
# DB table IO Q plot
DBTableRatioToQplot(tableIODataFrame,
SqlFileToPng(sqlFile, dbInstance, "-TableIORatiosQplot"));
Procedure IO List
SQL
DB-Procedure_listIO.sql
ListProceduresIO
SELECT
SYSP.name AS [StoreProcName]
, PSTA.total_physical_reads AS [TotalPhysicalReads]
, PSTA.total_logical_reads AS [TotalLogicalReads]
, PSTA.total_elapsed_time AS [TotalElapsedTime]
, PSTA.execution_count AS [ExecutionCount]
, PSTA.cached_time AS [CachedTime]
, PSTA.total_physical_reads/PSTA.execution_count AS [AvgPhysicalReads]
, PSTA.total_logical_reads/PSTA.execution_count AS [AvgLogicalReads]
, PSTA.total_elapsed_time/PSTA.execution_count AS [AvgElapsedTime]
FROM sys.procedures AS SYSP
INNER JOIN
sys.dm_exec_procedure_stats AS PSTA
ON SYSP.[object_id] = PSTA.[object_id]
WHERE PSTA.database_id = DB_ID()
ORDER BY
[StoreProcName], [TotalPhysicalReads], [TotalLogicalReads]
;
R
ProcedureIOList
## DB StoredProc IO
sqlFile <- "SQL/DB-Procedure_listIO.sql";
storedProcIODataFrame <- SqlResultToDataFrame(simmqODBC, GetSqlFromFile(sqlFile));
DataFrameToCsv(storedProcIODataFrame,
SqlFileToCsv(sqlFile, dbInstance, "-StoredProcIO"));
if(nrow(storedProcIODataFrame)>1){
# DB StoredProc IO ratio stacked histogram
ioRatioTableDF <- MinimizeStoredProcIO(storedProcIODataFrame);
DataFrameToCsv(ioRatioTableDF,
SqlFileToCsv(sqlFile, dbInstance, "-StoredProcIORatios"));
# DB StoredProc IO stacked plot
DBStoredProcRatioToStackeplot(ioRatioTableDF,
SqlFileToPng(sqlFile, dbInstance, "-StoredProcIORatios"));
# DB StoredProc IO Q plot
DBStoredProcRatioToQplot(storedProcIODataFrame,
SqlFileToPng(sqlFile, dbInstance, "-StoredProcIORatiosQplot"));
}
Subscribe to:
Posts (Atom)
HTMLCode
HTMLCode Content