ΠΠ°ΠΊΡΠΎ Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΠΈΠ³ΡΠ°ΡΡ Π²Π°ΠΆΠ½Π° ΡΠΎΠ»Ρ Π² Π‘Π£ΠΠ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΉΠΊΠΈ Π±ΡΡΠ·ΠΎ ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π½ΡΠΆΠ½ΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ. ΠΡΠΎ Π·Π°ΡΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌΠ΅ Π½Π°Π²ΡΠ΅ΠΌΠ΅. Π ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ ΠΈΠ·Π²ΡΠ½ Π½Π΅Π³ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ ΠΎΡΠ½ΠΎΡΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΡΠΊΠΎΡΠΎ Π±Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ° Π² .
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°ΡΠ΅Π½ΠΈ ΠΈ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΡΠΎΠ²Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ° ΠΏΡΠΈΠΊΠ»ΡΡΠ΅Π½ΠΎ , ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° Π°Π΄Π°ΠΏΡΠΈΠ²Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅.
Π‘Π΅Π³Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½Π°ΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° , ΡΠΈΠΉΡΠΎ Π°Π²ΡΠΎΡ Π΅ .
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ SQLIndexManager ΠΈ Π½ΡΠΊΠΎΠΈ ΠΎΡ Π΄ΡΡΠ³ΠΈΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½Π° ΠΎΡ ΡΠ°ΠΌΠΈΡ Π°Π²ΡΠΎΡ. ΠΈ .
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
Π’Π°Π·ΠΈ ΡΡΠΈΠ»ΠΈΡΠ° Π΅ ΠΎΠ±Π΅ΠΊΡ Π½Π° ΠΎΠ±ΡΡΠΆΠ΄Π°Π½Π΅. .
Π‘ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠΈΡΠ΅ ΠΈ Π±ΡΠ³ΠΎΠ²Π΅ΡΠ΅ Π±ΡΡ
Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½ΠΈ.
Π ΡΠ°ΠΊΠ°, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ ΡΠ°ΠΌΠ°ΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° SQLIndexManager.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° C# .NET Framework 4.5 Π² Visual Studio 2017 ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° DevExpress Π·Π° ΡΠΎΡΠΌΠΈΡΠ΅:
ΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
ΠΡΠΈΡΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ Π² ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅:
- ΠΠ½Π΄Π΅ΠΊΡ
- ΠΠ°ΡΠ²ΠΊΠ°
- ΠΠ²ΠΈΠ³Π°ΡΠ΅Π» Π·Π° Π·Π°ΡΠ²ΠΊΠΈ
- ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΡΠ²ΡΡΠ°
ΠΡΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π‘Π£ΠΠ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ²Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
ApplicationName="SQLIndexManager" ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈ ΠΌΠΎΠ΄Π°Π»Π΅Π½ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅:
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ»Π½ΠΈΡ ΡΠΏΠΈΡΡΠΊ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈ Π½Π° MS SQL Server, Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π² Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΠΈ.
Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈ ΠΈ Ρ Π»Π΅Π²ΠΈΡ Π±ΡΡΠΎΠ½ Π² Π³Π»Π°Π²Π½ΠΎΡΠΎ ΠΌΠ΅Π½Ρ:
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π‘Π£ΠΠ:
- ΠΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π‘Π£ΠΠ
SELECT ProductLevel = SERVERPROPERTY('ProductLevel') , Edition = SERVERPROPERTY('Edition') , ServerVersion = SERVERPROPERTY('ProductVersion') , IsSysAdmin = CAST(IS_SRVROLEMEMBER('sysadmin') AS BIT) - ΠΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΏΠΈΡΡΠΊ Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°
SELECT DatabaseName = t.[name] , d.DataSize , DataUsedSize = CAST(NULL AS BIGINT) , d.LogSize , LogUsedSize = CAST(NULL AS BIGINT) , RecoveryModel = t.recovery_model_desc , LogReuseWait = t.log_reuse_wait_desc FROM sys.databases t WITH(NOLOCK) LEFT JOIN ( SELECT [database_id] , DataSize = SUM(CASE WHEN [type] = 0 THEN CAST(size AS BIGINT) END) , LogSize = SUM(CASE WHEN [type] = 1 THEN CAST(size AS BIGINT) END) FROM sys.master_files WITH(NOLOCK) GROUP BY [database_id] ) d ON d.[database_id] = t.[database_id] WHERE t.[state] = 0 AND t.[database_id] != 2 AND ISNULL(HAS_DBACCESS(t.[name]), 1) = 1
Π‘Π»Π΅Π΄ ΡΠ²ΡΡΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ Ρ ΠΊΡΠ°ΡΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π±Π°Π·ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π½Π° ΠΈΠ·Π±ΡΠ°Π½ΠΈΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° MS SQL Server:
ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΡΠ°Π²Π°ΡΠ°. ΠΠΊΠΎ ΠΈΠΌΠ° , ΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ°Ρ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ . ΠΡΠΈ Π»ΠΈΠΏΡΠ° Π½Π° ΡΠ°ΠΊΠΈΠ²Π° ΠΏΡΠ°Π²Π° ΡΠ΅ Π²ΡΡΡΠ° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ Π·Π°Π±Π°Π²Ρ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ.
Π’ΡΠΊ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΡΠΈΡΠ½Π΅ Π±ΡΡΠΎΠ½Π° βΠΠβ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ ΡΠ»Π΅Π΄Π½ΠΈΡΡ ΡΠΊΡΠΈΠΏΡ Π·Π° Π²ΡΡΠΊΠ° ΠΈΠ·Π±ΡΠ°Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅:
ΠΠ½Π°Π»ΠΈΠ· Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅
declare @Fragmentation float=15;
declare @MinIndexSize bigint=768;
declare @MaxIndexSize bigint=1048576;
declare @PreDescribeSize bigint=32768;
SET NOCOUNT ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
IF OBJECT_ID('tempdb.dbo.#AllocationUnits') IS NOT NULL
DROP TABLE #AllocationUnits
CREATE TABLE #AllocationUnits (
ContainerID BIGINT PRIMARY KEY
, ReservedPages BIGINT NOT NULL
, UsedPages BIGINT NOT NULL
)
INSERT INTO #AllocationUnits (ContainerID, ReservedPages, UsedPages)
SELECT [container_id]
, SUM([total_pages])
, SUM([used_pages])
FROM sys.allocation_units WITH(NOLOCK)
GROUP BY [container_id]
HAVING SUM([total_pages]) BETWEEN @MinIndexSize AND @MaxIndexSize
IF OBJECT_ID('tempdb.dbo.#ExcludeList') IS NOT NULL
DROP TABLE #ExcludeList
CREATE TABLE #ExcludeList (ID INT PRIMARY KEY)
INSERT INTO #ExcludeList
SELECT [object_id]
FROM sys.objects WITH(NOLOCK)
WHERE [type] IN ('V', 'U')
AND ( [is_ms_shipped] = 1 )
IF OBJECT_ID('tempdb.dbo.#Partitions') IS NOT NULL
DROP TABLE #Partitions
SELECT [object_id]
, [index_id]
, [partition_id]
, [partition_number]
, [rows]
, [data_compression]
INTO #Partitions
FROM sys.partitions WITH(NOLOCK)
WHERE [object_id] > 255
AND [rows] > 0
AND [object_id] NOT IN (SELECT * FROM #ExcludeList)
IF OBJECT_ID('tempdb.dbo.#Indexes') IS NOT NULL
DROP TABLE #Indexes
CREATE TABLE #Indexes (
ObjectID INT NOT NULL
, IndexID INT NOT NULL
, IndexName SYSNAME NULL
, PagesCount BIGINT NOT NULL
, UnusedPagesCount BIGINT NOT NULL
, PartitionNumber INT NOT NULL
, RowsCount BIGINT NOT NULL
, IndexType TINYINT NOT NULL
, IsAllowPageLocks BIT NOT NULL
, DataSpaceID INT NOT NULL
, DataCompression TINYINT NOT NULL
, IsUnique BIT NOT NULL
, IsPK BIT NOT NULL
, FillFactorValue INT NOT NULL
, IsFiltered BIT NOT NULL
, PRIMARY KEY (ObjectID, IndexID, PartitionNumber)
)
INSERT INTO #Indexes
SELECT ObjectID = i.[object_id]
, IndexID = i.index_id
, IndexName = i.[name]
, PagesCount = a.ReservedPages
, UnusedPagesCount = CASE WHEN ABS(a.ReservedPages - a.UsedPages) > 32 THEN a.ReservedPages - a.UsedPages ELSE 0 END
, PartitionNumber = p.[partition_number]
, RowsCount = ISNULL(p.[rows], 0)
, IndexType = i.[type]
, IsAllowPageLocks = i.[allow_page_locks]
, DataSpaceID = i.[data_space_id]
, DataCompression = p.[data_compression]
, IsUnique = i.[is_unique]
, IsPK = i.[is_primary_key]
, FillFactorValue = i.[fill_factor]
, IsFiltered = i.[has_filter]
FROM #AllocationUnits a
JOIN #Partitions p ON a.ContainerID = p.[partition_id]
JOIN sys.indexes i WITH(NOLOCK) ON i.[object_id] = p.[object_id] AND p.[index_id] = i.[index_id]
WHERE i.[type] IN (0, 1, 2, 5, 6)
AND i.[object_id] > 255
DECLARE @files TABLE (ID INT PRIMARY KEY)
INSERT INTO @files
SELECT DISTINCT [data_space_id]
FROM sys.database_files WITH(NOLOCK)
WHERE [state] != 0
AND [type] = 0
IF @@ROWCOUNT > 0 BEGIN
DELETE FROM i
FROM #Indexes i
LEFT JOIN sys.destination_data_spaces dds WITH(NOLOCK) ON i.DataSpaceID = dds.[partition_scheme_id] AND i.PartitionNumber = dds.[destination_id]
WHERE ISNULL(dds.[data_space_id], i.DataSpaceID) IN (SELECT * FROM @files)
END
DECLARE @DBID INT
, @DBNAME SYSNAME
SET @DBNAME = DB_NAME()
SELECT @DBID = [database_id]
FROM sys.databases WITH(NOLOCK)
WHERE [name] = @DBNAME
IF OBJECT_ID('tempdb.dbo.#Fragmentation') IS NOT NULL
DROP TABLE #Fragmentation
CREATE TABLE #Fragmentation (
ObjectID INT NOT NULL
, IndexID INT NOT NULL
, PartitionNumber INT NOT NULL
, Fragmentation FLOAT NOT NULL
, PRIMARY KEY (ObjectID, IndexID, PartitionNumber)
)
INSERT INTO #Fragmentation (ObjectID, IndexID, PartitionNumber, Fragmentation)
SELECT i.ObjectID
, i.IndexID
, i.PartitionNumber
, r.[avg_fragmentation_in_percent]
FROM #Indexes i
CROSS APPLY sys.dm_db_index_physical_stats(@DBID, i.ObjectID, i.IndexID, i.PartitionNumber, 'LIMITED') r
WHERE i.PagesCount = @Fragmentation
OR
i.PagesCount > @PreDescribeSize
OR
i.IndexType IN (5, 6)
)
ΠΠ°ΠΊΡΠΎ Π΅ Π²ΠΈΠ΄Π½ΠΎ ΠΎΡ ΡΠ°ΠΌΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ, Π²ΡΠ΅ΠΌΠ΅Π²ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΄ΠΎΡΡΠ° ΡΠ΅ΡΡΠΎ. Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ Π½Π°Π»Π°Π³Π°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ, Π° ΠΏΡΠΈ Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΡ Π΅ΠΌΠ° ΠΏΠ»Π°Π½ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΏΡΠΈ Π²ΠΌΡΠΊΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΠΌΡΠΊΠ²Π°Π½Π΅ΡΠΎ Ρ ΡΠ°Π±Π»ΠΈΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎ Π² Π΅Π΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ.
Π‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π³ΠΎΡΠ΅ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡ ΡΠΊΡΠΈΠΏΡ ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅:
Π’ΡΠΊ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ°Ρ ΠΈ Π΄ΡΡΠ³Π° Π΄Π΅ΡΠ°ΠΉΠ»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠ°ΡΠΎ:
- Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ
- Π±ΡΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ
- Π΄Π°ΡΠ° ΠΈ ΡΠ°Ρ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅
- ΡΠΆΠ°ΡΠΈΠ΅
- ΡΠ°ΠΉΠ»ΠΎΠ²Π° Π³ΡΡΠΏΠ°
ΠΈ Π΄Ρ.
Π‘Π°ΠΌΠΈΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ:
Π ΠΊΠ»Π΅ΡΠΊΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π°ΡΠ° Fix ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·Π²ΡΡΡΠ΅Π½ΠΎ ΠΏΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΏΡΠΈ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ΡΠΎ, Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ° Π½Π° Π±Π°Π·Π° Π½Π° ΠΈΠ·Π±ΡΠ°Π½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ:
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ°Ρ Π½ΡΠΆΠ½ΠΈΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°.
Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π³Π»Π°Π²Π½ΠΎΡΠΎ ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠ°ΠΊΡΠΎ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ° (ΡΠ°Π·ΠΈ ΡΡΡΠ° Π±ΡΡΠΎΠ½ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅):
ΡΠ°ΠΊΠ° ΠΈ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ (ΡΠ°Π·ΠΈ Π±ΡΡΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ²ΠΎΡΡΡ Π΄Π΅ΡΠ°ΠΉΠ»Π½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅):
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠ±Π½ΠΎΠ²Π΅Π½Π°, ΠΊΠ°ΡΠΎ Π½Π°ΡΠΈΡΠ½Π΅ΡΠ΅ ΡΡΠ΅ΡΠΈΡ Π±ΡΡΠΎΠ½ Π²Π»ΡΠ²ΠΎ Π² Π³Π»Π°Π²Π½ΠΎΡΠΎ ΠΌΠ΅Π½Ρ Π΄ΠΎ Π»ΡΠΏΠ°ΡΠ°.
ΠΡΡΠΎΠ½ΡΡ Ρ Π»ΡΠΏΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π½ΡΠΆΠ½ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½ΡΠΌΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½Π° ΡΠΏΡΠ°Π²ΠΎΡΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ΡΠΎ Π½Π° Π±ΡΡΠΎΠ½Π° β?β ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄Π°Π»Π΅Π½ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡ:
ΠΡΠ²Π΅Π½ Π²ΡΠΈΡΠΊΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅, Π² Π³Π»Π°Π²Π½ΠΎΡΠΎ ΠΌΠ΅Π½Ρ ΠΈΠΌΠ° ΠΏΠΎΠ»Π΅ Π·Π° ΡΡΡΡΠ΅Π½Π΅:
ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅:
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π² Π΄ΠΎΠ»Π½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΡΠ΅ Π»ΠΎΠ³ Π½Π° ΠΈΠ·Π²ΡΡΡΠ΅Π½ΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
Π ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ° Ρ Π΄Π΅ΡΠ°ΠΉΠ»Π½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΠΏΠΎ-ΡΠΈΠ½ΠΈ ΠΎΠΏΡΠΈΠΈ:
ΠΠΎΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΊΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ:
- Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅Π»Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ (Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ ΡΠ°ΡΡΠΈΡΠ½ΠΎ)
- Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠ°ΠΌΠΎ ΠΈΠ·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΠ, Π½ΠΎ ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΡΠ²ΡΡΠΈ (ΡΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈ Π½Π° MS SQL Server)
- Π·Π° ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡ Π² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π°Ρ Π² ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½Π° PowerShell, ΠΊΠ°ΠΊΡΠΎ Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΊ:
- Π΄Π°Π΄Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»Π½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠ°ΠΊΡΠΎ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ°ΠΊΠ° ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΡΠ°Π½Ρ Π½Π° MS SQL Server ΠΈ Π·Π° Π²ΡΡΠΊΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ
- ΠΎΡ ΡΠΎΡΠΊΠΈ 2 ΠΈ 4 ΠΏΡΠΎΠΈΠ·ΡΠΈΡΠ° ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π°Ρ Π³ΡΡΠΏΠΈ ΠΏΠΎ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Π³ΡΡΠΏΠΈ ΠΏΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈ Π½Π° MS SQL Server, Π·Π° ΠΊΠΎΠΈΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ ΡΠ° Π΅Π΄Π½ΠΈ ΠΈ ΡΡΡΠΈ
- Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΈ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈ (ΠΏΡΠ»Π½ΠΈ ΠΈ Π½Π΅ΠΏΡΠ»Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ»ΠΈ Π½Π΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈΠ»ΠΈ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΡΠ°ΠΌΠΎ ΠΏΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ)
- ΡΡΠΉ ΠΊΠ°ΡΠΎ SQLIndexManager ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠΎ Π·Π° Π‘Π£ΠΠ MS SQL Server, Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΎΡΡΠ°Π·ΠΈ Π² ΠΈΠΌΠ΅ΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½: SQLIndexManager for MS SQL Server
- Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΡΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° GUI, Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° .NET Core 2.1
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°, ΡΠΎΡΠΊΠ° 6 ΠΎΡ ΠΆΠ΅Π»Π°Π½ΠΈΡΡΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° ΠΈ Π²Π΅ΡΠ΅ ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π²ΡΠ² Π²ΠΈΠ΄ Π½Π° ΡΡΡΡΠ΅Π½Π΅ Π½Π° ΠΏΡΠ»Π½ΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΈ:
ΠΠ·ΡΠΎΡΠ½ΠΈΡΠΈ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
