Dochází místo v lokální databázi

Popis

V logu klienta se objevuje podobná chyba:

Could not allocate a new page for database 'eWay' because of insufficient disk space in filegroup 'PRIMARY'. Create the necessary space by dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

Verze

Všechny verze eWay-CRM

Obtížnost řešení

Vysoká

Postup řešení

Lokální databáze Microsoft SQL Server LocalDB nebo Express mají limit na 10 GB.

Pomocí následujícího dotazu zjistíme, která z tabulek / indexů zabírá nejvíce místa, na něž je následně vhodné se zaměřit:

SELECT
    OBJECT_SCHEMA_NAME(i.OBJECT_ID) AS SchemaName,
    OBJECT_NAME(i.OBJECT_ID) AS TableName,
    i.name AS IndexName,
    i.index_id AS IndexID,
    8 * SUM(a.used_pages) AS 'IndexSize(KB)'
FROM sys.indexes AS i
    JOIN sys.partitions AS p ON p.OBJECT_ID = i.OBJECT_ID AND p.index_id = i.index_id
    JOIN sys.allocation_units AS a ON a.container_id = p.partition_id
GROUP BY i.OBJECT_ID, i.index_id, i.name
ORDER BY SUM(a.used_pages) DESC

Článek dále obsahuje následující řešení:

Omezení počtu marketingových reakcí

Doporučujeme nevytvářet a odstranit reakce typu E-mail odeslán a E-mail doručen. Informaci o tom, jaká kampaň na daný kontakt šla, je možné zjistit i na záložce Marketing.

Následujícím dotazem se dá zjistit, kolik takových deníků v eWay-CRM je a jestli tedy řešení pomůže. Dotaz je potřeba spustit na serverové databázi eWay-CRM.

SELECT COUNT(ItemGUID) FROM EWD_Journal WHERE EmailCampaignResponseType = 1 OR EmailCampaignResponseType = 2

Tímto skriptem můžeme staré reakce smazat ze serverové databáze eWay-CRM:

DECLARE @JournalGUID AS UNIQUEIDENTIFIER
DECLARE Journals CURSOR LOCAL FORWARD_ONLY FAST_FORWARD READ_ONLY FOR
    SELECT ItemGUID FROM EWD_Journal WHERE EmailCampaignResponseType = 1 OR EmailCampaignResponseType = 2
    OPEN Journals

    FETCH NEXT FROM Journals INTO @JournalGUID
    WHILE @@FETCH_STATUS = 0
    BEGIN
        EXEC eWaySP_DeleteItem @ItemGUID = @JournalGUID, @FolderName = 'Journal'

        FETCH NEXT FROM Journals INTO @JournalGUID
    END
CLOSE Journals
DEALLOCATE Journals

Omezení velikosti poznámky v e-mailech

Pokud jako jeden z největších indexů vychází clustered index IX_Emails bude to pravděpodobně souviset s velikostí pole Poznámka (Note).

eWay-CRM při ukládání každého e-mailu ukládání do pole Poznámka obsah e-mailu v podobě neformátovaného textu. To ale může být pro každý e-mail několik tisíc znaků.

Od verze 8.0 můžeme tyto poznámky zkrátit pomocí SQL procedury eWaySP_TrimEmailsNote. Procedura má tyto parametry:
  • @MonthsBack - určuje u jak moc starých e-mailů má být poznámka zkrácena (výchozí je 12 měsíců)
  • @MaxLength - určuje na jakou velikost mají být e-maily ořezány (výchozí hodnota je 300 znaků). To je dostatečné, pokud se například v HUBu potřebujete v e-mailech zorientovat.

Celý obsah e-mailu zůstane pořád dostupný v originální zprávě, kterou bude stále možné otevřít.

Pro nastavení automatického promazání je potřeba vytvořit job, který může vypadat např. takto:

<TriggerDefinition When="ScheduledAtTime" Active="true">
  <Action Type="StoredProcedure">
    <StoredProcedures>
      <StoredProcedure Name="eWaySP_TrimEmailsNote"/>
    </StoredProcedures>
    <Criterias>
      <ActionCriteria Name="Time" Value="06:00:00"/>
      <ActionCriteria Name="Repeat" Value="w"/>
      <ActionCriteria Name="DayOfWeek" Value="Monday" />
    </Criterias>
  </Action>
</TriggerDefinition>

Co dělat když lokální databáze obsahuje změny a už nemůže synchronizovat?

Nejprve aplikujeme některé výše zmíněné změny na serveru.

Na dané stanici zavřeme Outlook.

Nejprve zkusíme defragmentovat indexy:

EXEC eWaySP_DefragmentIndexes

Spustíme Outlook. Vyčkáme na dokončení synchronizace. Pokud synchronizace stále nedobíhá, podle aplikovaného řešení výše

identifikujeme tabulku v lokální databázi a zjistíme zda neobsahuje nějaké nenahrané změny. Pro deníky by dotaz vypadal takto:

SELECT * FROM Journal WHERE ItemState <> 1

Pokud dotaz nic nevrací, můžeme tabulku promazat:

TRUNCATE TABLE Journal

Pomocí registrů Windows vyvoláme synchronizaci podle složek, aby se dotáhly chybějící položky. Stačí stáhnou a spustit tento soubor: https://download.eway-crm.com/regfiles/request_synchronize_all_counter.zip

Poté spustíme Outlook a počkáme na dokončení synchronizace.