Skip to content

Underhåll ​

För optimal drift av flexite är det rekommenderat att utföra löpande underhåll av miljön. I detta kapitel går vi igenom några rekommenderade åtgärder.

Defragmentera databas ​

Databasen i flexite nyttjar 'Full-Text Catalog' för att tillgodose utökade möjligheter samt ökad prestanda för fritextsökning i sökapplikationerna i flexite.

Databasen i flexite nyttjar databas-index för att tillgodose god prestanda vid läsning av information.

Allt eftersom information läggs till, uppdateras och tas bort i databasen uppdateras även 'Full-Text Catalog' samt dessa index, varpå fragmentering uppstår. En effekt av fragmenterade index är att prestandan vid läsning av information sjunker, vilket exempelvis påverkar sökapplikationerna i flexite.

Det är starkt rekommenderat att schemalägga dessa åtgärder utanför arbetstid för att minimera påverkan på funktionalitet och prestanda i flexite. Det är kritiskt att dessa åtgärder inte kolliderar med andra schemalagda åtgärder och uppgifter.

Full-Text Catalog ​

Flexite AB rekommenderar starkt att en gång per dygn återskapa ('REBUILD') Full-Text Catalog i flexites databas ('FlexiteFullTextCatalog'), oavsett fragmentationsgrad.

Det är möjligt att schemalägga denna operation via Microsoft SQL Server Agent Jobs.

Full-Text Index REBUILD ​

Att initiera ett återskapande av Full-Text Catalog i flexites databas (' flexite') kan utföras med följande SQL-skript:

sql
USE [flexite];

GO
ALTER FULLTEXT CATALOG FlexiteFullTextCatalog REBUILD;

Obs!

Detta skript rapporteras som klart när operationen REBUILD har initierats, inte när den slutförts. Själva operationen utförs i bakgrunden efter initiering.

Övervaka REBUILD ​

Operationen REBUILD för Full-text Catalog utförs som standard i bakgrunden. Följande SQL-skript är ett exempel på hur denna operation kan övervakas där status skrivs till Message var 10:e sekund:

sql
USE [flexite];

GO
DECLARE @status AS INT = 1, @started AS BIT = 0, @msg AS VARCHAR (MAX);

WHILE @status <> 0
  BEGIN
    SELECT @status = FULLTEXTCATALOGPROPERTY('FlexiteFullTextCatalog', 'PopulateStatus');
    IF @status = 0
       AND @started = 0
      BEGIN
        SET @status = -1;
      END
    SET @msg = CONVERT (VARCHAR (25), getdate(), 120) + ' Full text catalog rebuild status: ' + (CASE @status 
      WHEN -1 THEN 'Not started'
      WHEN 0 THEN 'Idle'
      WHEN 1 THEN 'Full Population In Progress'
      WHEN 2 THEN 'Paused'
      WHEN 3 THEN 'Throttled'
      WHEN 4 THEN 'Recovering'
      WHEN 5 THEN 'Shutdown'
      WHEN 6 THEN 'Incremental Population In Progress'
      WHEN 7 THEN 'Building Index'
      WHEN 8 THEN 'Disk Full. Paused'
      WHEN 9 THEN 'Change Tracking'
    END);
    RAISERROR (@msg, 0, 1)
      WITH NOWAIT;
    IF @status != -1
      BEGIN
        SET @started = 1;
      END
    IF @status != 0
      BEGIN
        WAITFOR DELAY '00:00:10';
      END
  END
Avläsa fragmentationsgrad ​

Det är möjligt att se information om fragmentationsgraden för Full-Text Catalog i flexites databas (' flexite') med följande SQL-skript:

sql
USE [flexite];

GO
DROP TABLE IF EXISTS #fulltextFragmentationDetails;

GO
SELECT fc.fulltext_catalog_id,
       fc.name AS fulltext_catalog_name,
       OBJECT_SCHEMA_NAME(fi.OBJECT_ID) + '.' + OBJECT_NAME(fi.object_id) AS object_name,
       fif.num_fragments,
       fif.fulltext_mb AS size_mb,
       fif.largest_fragment_mb,
       100 * (fif.fulltext_mb - fif.largest_fragment_mb) / NULLIF (fif.fulltext_mb, 0) AS fragmentation_percent
INTO   #fulltextFragmentationDetails
FROM   sys.fulltext_catalogs AS fc
       INNER JOIN
       sys.fulltext_indexes AS fi
       ON fi.fulltext_catalog_id = fc.fulltext_catalog_id
       INNER JOIN
       (SELECT   table_id,
                 COUNT(*) AS num_fragments,
                 CONVERT (DECIMAL (9, 2), SUM(data_size / (1024. * 1024.))) AS fulltext_mb,
                 CONVERT (DECIMAL (9, 2), MAX(data_size / (1024. * 1024.))) AS largest_fragment_mb
        FROM     sys.fulltext_index_fragments
        GROUP BY table_id) AS fif
       ON fif.table_id = fi.object_id;

SELECT   *
FROM     #fulltextFragmentationDetails
ORDER BY fragmentation_percent DESC;

Databas-index ​

Flexite AB rekommenderar att minst en gång per vecka utföra följande åtgärder på samtliga index i flexites databas:

  1. Återskapa ('REBUILD') samtliga index i flexites databas som har en fragmentationsgrad på 30% eller mer. För att minimera påverkan på flexite är det rekommenderat att utföra denna operation med index ONLINE.
  2. Omorganisera ('REORGANIZE') samtliga index i flexites databas som har en fragmentationsgrad på 5% eller mer.

Det är möjligt att nyttja Wizard for Microsoft SQL Maintenance Plans för att schemalägga dessa operationer. För information om Maintenance Plans för att underhålla databas-index, se Microsofts dokumentation:

https://learn.microsoft.com/en-us/sql/relational-databases/indexes/reorganize-and-rebuild-indexes?view=sql-server-ver16

Avläsa fragmentationsgrad ​

Det är möjligt att se information om fragmentationsgraden för index i en databas (' flexite') med följande SQL-skript:

sql
SELECT   *
FROM     sys.dm_db_index_physical_stats(DB_ID('flexite'), NULL, NULL, NULL, 'DETAILED')
ORDER BY avg_fragmentation_in_percent DESC;
SQL Maintenance Plan — REBUILD ​

För operationen 'REBUILD' rekommenderar Flexite AB följande konfiguration i SQL Maintenance Plan Wizard:

  • Maintenance task = Rebuild Index
  • Object = Tables and Views
  • Free space options = Default free space per page
  • Advanced options = Keep index online; Do not rebuild indexes
  • Scan type = Detailed
  • Fragmentation > 30%
  • Page Count = INAKTIV
  • Used in last = INAKTIV

Bra att veta

Online index rebuild kräver en Enterprise-utgåva av Microsoft SQL.

SQL Maintenance Plan — REORGANIZE ​

För operationen 'REORGANIZE' rekommenderar Flexite AB följande konfiguration i SQL Maintenance Plan Wizard:

  • Maintenance task = Reorganize Index
  • Object = Tables and Views
  • Compact large objects = AKTIV
  • Scan type = Detailed
  • Fragmentation > 5%
  • Page Count = INAKTIV
  • Used in last = INAKTIV