Создание нового листа
-
Нажать кнопку "New list "MS SQL"" в окне редактора
-
File -> New -> MSSQL Server
-
Комбинация клавиш: Ctrl+F5
Менеджер соединений с сервером MS SQL
Group filter
Фильтр для отображения списка сохраненных соединений определенной группы
Подключение к серверу MS SQL
-
Alias - синоним соединений
-
Group name - имя группы в списке соединений
-
Server name - DNS имя или IP адрес сервера
-
Port - порт на котором работает MSSQL (по умолчанию 1433)
-
Database - имя базы данных (по умолчанию база данных пользователя)
-
Authentication type - способ аутентификации в базе данных
-
Windows authentication - аутентификация на основе имени пользователя в ОС
-
MS SQL authentication - аутентификация на основе введенного логина и пароля
-
Если метод аутентификации "MS SQL authentication"
-
User name - имя пользователя в БД
-
Password - пароль пользователя
Подключение к серверу Azure
-
Alias - синоним соединений
-
Group name - имя группы в списке соединений
-
Server name - DNS имя или IP адрес сервера
-
Port - порт на котором работает MSSQL (по умолчанию 1433)
-
Database - имя базы данных (по умолчанию база данных пользователя)
-
Authentication type - способ аутентификации в базе данных
-
MS SQL authentication - аутентификация на основе введенного логина и пароля
-
AZURE active directory - аутентификация на основе логина и пароля в домене Azure
-
-
Encrypt traffic -> Yes - шифровать трафик
Если метод аутентификации "MS SQL authentication"
-
User name - имя пользователя в БД
-
Password - пароль пользователя
Если метод аутентификации "AZURE active directory"
-
User name - логин домене azure в формате логин@домен
-
Password - пароль
-
Provider - имя провайдера соединения (ODBC Driver 17 for SQL Server, ODBC Driver 16 for SQL Server, ...)
После подключения к СУБД, смена текущей базы выполняется в том числе, через выпадающий список "Current database".
Для отключения от БД всех соединений текущего листа нажать на кнопку "Disconnect"
Дерево объектов
Дерево объектов - интерфейс для визуализации структуры кластера, управления объектами.
Корневая запись дерева структурно состоит из имени сервера к которому подключен лист и его версии.
Каждый лист создает несколько соединений с БД
-
соединение для отображения информации в дереве объектов
-
соединение для выполнения SQL запросов, команд (основной процесс)
-
соединение для выполнения SQL запросов, команд (дополнительный процесс)
Database
Список баз данных созданных на сервере MSSQL Server
select d.name, lower(d.state_desc) "state_desc"
from sys.databases d with (nolock)
order by d.database_id
List schema
SELECT s.name AS schema_name
FROM tdb.sys.schemas s
where schema_id <10000
ORDER BY s.name
TABLE
Список таблиц в базе данных сгруппированный по схемам
select s.name "Schemaname",
t.name "Tablename",
t.object_id
from $$DBNAME.sys.tables t,
$$DBNAME.sys.schemas s
where t.schema_id = s.schema_id
and s.name = $$SCHEMANAM
Меню:
-
Edit data tablle (show all) - открыть таблицу в режиме редактирования записей. В сетке добавляется панель редактора данных. Таблица открывается полностью но в сетке выводятся первые 50 строк.
-
Show data (top 100) - вывести в сетке первые 100 записей в таблице
-
Get source - сформировать и добавить в редактор код создания таблицы и ее индексов
-
Script - select - сформировать и добавить в редактор текст запроса для выборки данных из таблицы.
-
Script - insert - сформировать и добавить в редактор текст команды insert для вставки данных из таблицу.
-
Export data to CSV - запустить мастер выгрузки данных из таблицы
-
Import data from CSV - запустить мастер импорта данных из CSV файла в выбранную таблицу
Узел COLUMN
Список колонок таблицы с указанием типа данных
select c.name "ColumnName",
t.name "CoolumnType",
c.max_length,
c.precision,
c.scale
from $$DBNAME.sys.columns c,
$$DBNAME.sys.types t
where object_id =$$OBJECT_ID
and c.user_type_id = t.user_type_id
order by c.column_id
Узел INDEX
Список индексов построенных по колонкам таблицы
Список индексов с подробной информацией
SELECT
Object_id = ind.object_id,
TableName = t.name,
IndexName = ind.name,
IndexId = ind.index_id,
ind.type_desc,
ind.is_unique,
ind.ignore_dup_key,
ind.is_primary_key,
ind.is_unique_constraint,
ind.fill_factor,
ind.is_disabled,
ind.is_ignored_in_optimization,
ind.compression_delay
FROM
tdb.sys.indexes ind INNER JOIN tdb.sys.tables t ON ind.object_id = t.object_id
inner join tdb.sys.schemas sch on sch.schema_id = t.schema_id
where sch.name = $$SCHEMA_NAME
and t.name =$$TABLE_NAME
and ind.name is not null
Список о колонок по которым построен индекс
SELECT col.name
FROM tdb.sys.indexes ind
INNER JOIN tdb.sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN tdb.sys.tables t ON ind.object_id = t.object_id
INNER JOIN tdb.sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
where ind.name = $$INDEX_NAME
and t.name = $$TABLE_NAME
order by ic.index_column_id
Узел CONSTRAINTS
Список ограничений таблицы
select table_view,
object_type,
constraint_type,
constraint_name,
details
from (
select schema_name(t.schema_id) + '.' + t.[name] as table_view,
case when t.[type] = 'U' then 'Table'
when t.[type] = 'V' then 'View'
end as [object_type],
case when c.[type] = 'PK' then 'Primary key'
when c.[type] = 'UQ' then 'Unique constraint'
when i.[type] = 1 then 'Unique clustered index'
when i.type = 2 then 'Unique index'
end as constraint_type,
isnull(c.[name], i.[name]) as constraint_name,
substring(column_names, 1, len(column_names)-1) as [details]
from $$DBNAME.sys.objects t
left outer join $$DBNAME.sys.indexes i
on t.object_id = i.object_id
left outer join $$DBNAME.sys.key_constraints c
on i.object_id = c.parent_object_id
and i.index_id = c.unique_index_id
cross apply (select col.[name] + ', '
from $$DBNAME.sys.index_columns ic
inner join $$DBNAME.sys.columns col
on ic.object_id = col.object_id
and ic.column_id = col.column_id
where ic.object_id = t.object_id
and ic.index_id = i.index_id
order by col.column_id
for xml path ('') ) D (column_names)
where is_unique = 1
and t.is_ms_shipped <> 1
union all
select schema_name(fk_tab.schema_id) + '.' + fk_tab.name as foreign_table,
'Table',
'Foreign key',
fk.name as fk_constraint_name,
schema_name(pk_tab.schema_id) + '.' + pk_tab.name
from $$DBNAME.sys.foreign_keys fk
inner join $$DBNAME.sys.tables fk_tab
on fk_tab.object_id = fk.parent_object_id
inner join $$DBNAME.sys.tables pk_tab
on pk_tab.object_id = fk.referenced_object_id
inner join $$DBNAME.sys.foreign_key_columns fk_cols
on fk_cols.constraint_object_id = fk.object_id
union all
select schema_name(t.schema_id) + '.' + t.[name],
'Table',
'Check constraint',
con.[name] as constraint_name,
con.[definition]
from $$DBNAME.sys.check_constraints con
left outer join $$DBNAME.sys.objects t
on con.parent_object_id = t.object_id
left outer join $$DBNAME.sys.all_columns col
on con.parent_column_id = col.column_id
and con.parent_object_id = col.object_id
union all
select schema_name(t.schema_id) + '.' + t.[name],
'Table',
'Default constraint',
con.[name],
col.[name] + ' = ' + con.[definition]
from $$DBNAME.sys.default_constraints con
left outer join $$DBNAME.sys.objects t
on con.parent_object_id = t.object_id
left outer join $$DBNAME.sys.all_columns col
on con.parent_column_id = col.column_id
and con.parent_object_id = col.object_id) a
where a.table_view = $$TABLE_SCHEMA.$$TABLE_NAME
order by table_view, constraint_type, constraint_name
Узел TRIGGERS
Список триггеров на таблице
select tr.name,
tr.object_id,
tr.create_date,
tr.is_ms_shipped,
tr.is_disabled,
tr.is_not_for_replication,
t.name "table_name",
sc.name "schema_name"
from $$DBNAME.sys.triggers tr,
$$DBNAME.sys.tables t,
$$DBNAME.sys.schemas sc
where tr.parent_id = t.object_id
and t.schema_id = sc.schema_id
and tr.parent_id = $$OBJECT_ID
order by sc.name, t.name, tr.name
Узел SIZE
Информация о текущем размере таблицы и ее индексов, свободном месте
SELECT
t.Name AS TableName,
s.Name AS SchemaName,
p.Rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
$$DBNAME.sys.tables t
INNER JOIN $$DBNAME.sys.indexes i ON t.object_id = i.object_id
INNER JOIN $$DBNAME.sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN $$DBNAME.sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN $$DBNAME.sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.Name = $$TABLE_NAME
and S.name = $$SCHEMA_NAME
AND t.is_ms_shipped = 0
AND i.object_id > 255
GROUP BY
t.Name, s.Name, p.Rows
Узел VIEW
Список представлений в выбранной БД сгруппированные по схемам
SELECT av.name
FROM $$DBNAME.sys.all_views av,
$$DBNAME.sys.schemas s
where s.schema_id=av.schema_id
and s.name = $$SCHEMA
order by 1
Меню
-
Show data - показать данные представления. Выбираются первые 100 строк в режиме грязного чтения (with (nolock))
-
Get source - сформировать и вывести в редактор команду на создание представления
Узел SYNONYM
select s.name,
s.object_id,
s.create_date,
s.modify_date,
s.is_ms_shipped,
s.is_published,
s.base_object_name
from $$DBNAME.sys.synonyms s,
$$DBNAME.sys.schemas sc
where s.schema_id = sc.schema_id
and sc.name = $$SCHEMA_NAME
Узел PROCEDURE
Список процедур в выбранной БД сгруппированный по схемам
select o.name "name", o.object_id
from $$DBNAME.sys.all_objects o,
$$DBNAME.sys.schemas s
where o.type in ('P','PC')
and o.schema_id = s.schema_id
and lower(s.name) = lower($$SCHEMA)
order by 1
Меню
-
Get source - сформировать и добавить в редактор текст команды создания процедуры
use $$DBNAME
go
SELECT OBJECT_DEFINITION (OBJECT_ID(N'$$SCHEMA_NAME.$$PROCEDURE_NAME')) AS [Definition]
Узел FUNCTION
Список функций в выбранной БД сгруппированный по схемам
select o.name "name", o.object_id
from tdb.sys.all_objects o,
tdb.sys.schemas s
where o.type in ('AF','FN','FS','FT','IF')
and o.schema_id = s.schema_id
and lower(s.name) = lower($$SCHEMA_NAME)
order by 1
Меню
-
Get source - сформировать и добавить в редактор текст команды создания процедуры
use $$DBNAME
go
SELECT OBJECT_DEFINITION (OBJECT_ID(N'$$SCHEMA_NAME.$$PROCEDURE_NAME')) AS [Definition]
Узел TRIGGER
Список триггеров в выбранной базе данных сгруппированный по таблицам в схемах
select tr.name,
tr.object_id,
tr.create_date,
tr.is_ms_shipped,
tr.is_disabled,
tr.is_not_for_replication,
t.name "table_name",
sc.name "schema_name"
from $$DBNAME.sys.triggers tr,
$$DBNAME.sys.tables t,
$$DBNAME.sys.schemas sc
where tr.parent_id = t.object_id
and t.schema_id = sc.schema_id
order by sc.name, t.name, tr.name
Меню
-
Disable trigger - сформировать и добавить в редактор команду для отключения триггер
-
Enable trigger - сформировать и добавить в редактор команду для включения триггера
-
Get source - сформировать и добавить в редактор текст команды на создание триггера
Узел TYPE
Список типов созданных в выбранной БД сгруппированный по схемам
select t.name
from $$DBNAME.sys.types t,
$$DBNAME.sys.schemas s
where s.schema_id = t.schema_id
and s.name = $$SCHEMA_NAME
order by t.name
Узел SEQUENCE
Список последовательностей созданных в выбранной БД сгруппированный по схемам
select s.name,
s.object_id,
s.create_date,
s.modify_date,
s.start_value,
s.current_value,
s.maximum_value
from $$DBNAME.sys.sequences s,
$$DBNAME.sys.schemas sc
where sc.schema_id = s.schema_id
and sc.name = $$SCHEMA_NAME
order by s.name
Узел SECURITY
Список ролей и пользователей созданных на сервере MSSQL
select createdate,
updatedate,
name,
dbname,
language,
denylogin,
hasaccess,
case when isntname = 1
then 'USER'
else 'SYSTEM' end "isntname",
case when isntgroup = 1
then 'GROUP'
else 'USER' end "isntgroup",
sysadmin,
securityadmin,
serveradmin,
setupadmin,
processadmin,
diskadmin,
dbcreator,
bulkadmin
from master.sys.syslogins
order by name desc
MONITOR
Единый центр управления, мониторинга и оптимизации базами данных MS SQL Server
SESSION LIST
Список сессий на сервере MSSQL
Список сессий, обновляется в ручную нажатием кнопки "Refresh list session" или нажатием клавиши F5
exec sp_who2
При выделении строки в списке сессий, в блоке Details отображается подробная информация о сессии, в поле Query выводится текст текущего SQL запроса
SELECT (SELECT [text]
FROM sys.dm_exec_sql_text(sql_handle)) AS SqlCommand,
spid AS [Process ID], status AS [Status],
hostname AS [Host Name],
hostprocess AS [Host Process],
SPACE(3) AS [Company],
0 AS [Task],
SPACE(64) AS [Description],
loginame AS [User],
open_tran AS [Open Trans],
cmd AS [Command],
blocked AS [Blocked],
CONVERT(VARCHAR(19), waittime) AS [Wait Time],
[Waiting] = Case waittype
WHEN 0x0000 THEN SPACE(256)
Else waitresource END,
login_time AS [Login Time],
SPACE(64) AS [WTS Client], SPACE(12) AS [WTS ID],
program_name AS [Application]
FROM sys.sysprocesses WITH (NOLOCK)
WHERE spid = $$SESSION_ID
При переключении на вкладку PLAN отображается план выполнения запроса
MISSING INDEX
Список индексов необходимых для оптимизации работы запросов (повышение производительности работы БД).
Обновление списка рекомендованных индексов осуществляется по нажатию кнопки F5
SELECT TOP 100
dm_mid.database_id AS DatabaseID,
dm_migs.avg_user_impact*(dm_migs.user_seeks+dm_migs.user_scans) Avg_Estimated_Impact,
dm_migs.last_user_seek AS Last_User_Seek,
OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) AS [TableName],
'CREATE INDEX [IX_' + OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) + '_'
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.equality_columns,''),', ','_'),'[',''),']','')
+ CASE
WHEN dm_mid.equality_columns IS NOT NULL
AND dm_mid.inequality_columns IS NOT NULL THEN '_'
ELSE ''
END
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.inequality_columns,''),', ','_'),'[',''),']','')
+ ']'
+ ' ON ' + dm_mid.statement
+ ' (' + ISNULL (dm_mid.equality_columns,'')
+ CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns
IS NOT NULL THEN ',' ELSE '' END
+ ISNULL (dm_mid.inequality_columns, '')
+ ')'
+ ISNULL (' INCLUDE (' + dm_mid.included_columns + ')', '') AS Create_Statement
FROM sys.dm_db_missing_index_groups dm_mig
INNER JOIN sys.dm_db_missing_index_group_stats dm_migs
ON dm_migs.group_handle = dm_mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details dm_mid
ON dm_mig.index_handle = dm_mid.index_handle
ORDER BY Avg_Estimated_Impact DESC
WAIT STATS
Статистика по ожиданиям сессий в базах данных MSSQL отсортированная по частоте появления
SELECT TOP 30
[Wait_type] = wait_type,
[Wait_time] = wait_time_ms / 1000,
[waiting] = CONVERT(DECIMAL(12,2), wait_time_ms * 100.0
/ SUM(wait_time_ms) OVER())
FROM sys.dm_os_wait_stats
WHERE wait_type NOT LIKE '%SLEEP%'
ORDER BY wait_time_ms DESC
EDIT CONFIGURATION
Редактор параметров сервера MS SQL
select s.configuration_id,
s.name,
s.value,
s.minimum,
s.maximum,
s.value_in_use,
s.description,
s.is_dynamic,
s.is_advanced
from master.sys.configurations s
order by name
Изменение значения параметра
-
Выбрать базу из списка Database name
-
В списке Parameter list выбрать нужный параметр конфигурации
-
В поле New value ввести новое значение
-
Нажать кнопку Apply
SERVER LOG
Просмотр логов работы MSSQL Server