Quando Navision viene installato su SQL Server è possibile forzare l'utilizzo di uno specifico indice e modificare la granularità dei bloccaggi.
Sommario
L'impostazione del comportamento di SQL Server avviene tramite un'apposita tabella di configurazione che per default non esiste in un database, ma che può essere creata tramite il seguente comando e dovrà essere di proprietà del dbo:
CREATE TABLE [$ndo$dbconfig](config VARCHAR(512) NOT NULL)
E' possibile aggiungere colonne aggiuntive alla tabella se necessario, la grandezza della colonna di configuraione deve essere sufficientemente grande da contenere i valori di configurazione e non necessariamente 512.
Ogni parametro di configurazione richiede la presenza di un record in questa tabella.
In certi casi la scelta degli indici operata dal Query Optimizer non si rivela la più adatta, ciò può accadere su particolari tabelle e indici che contengono dati per cui le statistiche non sono sufficientemente rappresentative. In queste rare situazioni è possibile forzare Navision per l'utilizzo di uno specifico indice tramite l'Index Hinting.
Quando viene utilizzato l'Index Hinting Navision aggiunge dei comandi alle query SQL per bypassare le scelte operate dal Query Optimizer e forzare la scelta di uno specifico indice.
Questa funzionalità dovrebbe comunque essere utilizzata solo quando l'aggiornamento delle statistiche, l'ottimizzazione degli indici e la modifica dell'ordine delle colonne nell'indice non risolvono il problema.
La sintassi del parametro per l'impostazione dell'Index Hint è la seguente:
IndexHint=<Yes,No>;Company=<company name>;Table=<table name>;Key=<keyField1,keyField2,...>;Search Method=<search method list>;Index=<index id>
Le keyword devono essere tutte specificate altrimenti la configurazione verrà ignorata, nel caso i valori delle keywords Table, Key e search Method contengano spazi dovranno essere racchiusi tra doppi apici.
Nella seguente tabella è riportata una spiegazione delle keyword:
Parametro |
Descrizione |
IndexHint |
- Yes attiva la configurazione dell' Index Hint.
- No disattiva la configurazione dell' Index Hint.
|
Company |
La società per cui deve essere applicata la configurazione, se viene non specificata l'Index Hinting verrà applicato a tutte le società |
Table |
Corrisponde al nome dell'oggetto e non alla caption. |
Key |
Deve contenere tutte le colonne che individuano la relativa key definita in Navision. |
Search Method |
Elenco dei metodi di ricerca a cui si desidera applicare la configurazione:
- "-" (metodo FIND)
- "+" (metodo FIND)
- "=" (metodo FIND)
- "!" (metodo GET)
Se il Search Method non viene specificato la configurazione sarà applicata a tutti i Search Methods. |
Index |
Corrisponde all'ID dell'indice in SQL Server che si desidera utilizzare.
E' possibile ricavare tale id tramite la stored procedure sp_helpindex, ad esempio per ricavare l'id dell'indice della tabella Item Ledger Entry per società CRONUS Internation Ltd. utilizzare il seguente comando:
sp_helpindex "CRONUS Internation Ltd_$Item Ledger Entry"
Si tenga presente che l'id 0 corrisponde allaprimary key.
Se l'Index ID non viene specificato viene utilizzato l'indice che corrisponde alla Key specificata, questo di fatto è il comportamento desiderato nella maggior parte dei casi. |
Esempio di impostazione di uno specifico indice per i Search Method FIND("-") e FIND("+"):
INSERT INTO [$ndo$dbconfig] VALUES
('IndexHint=Yes;Company="CRONUS Internation Ltd.";Table="Item Ledger Entry"; Key="Item No.", "Variant Code";Search Method="-+";Index=3')
Esempio di impostazione dell'indice relativo alla Key per i Search Method FIND("-") e FIND("+"):
INSERT INTO [$ndo$dbconfig] VALUES
('IndexHint=Yes;Company="CRONUS Internation Ltd.";Table="Item Ledger Entry"; Key="Item No.", "Variant Code";Search Method="-+";Index=')
Esempio di impostazione dell'indice relativo alla Key per tutte le società per i Search Method FIND("-") e FIND("+"):
INSERT INTO [$ndo$dbconfig] VALUES
('IndexHint=Yes;Company=;Table="Item Ledger Entry"; Key="Item No.", "Variant Code";Search Method="-+";Index=')
Esempio di impostazione dell'indice relativo alla Key per tutte le società e per tutti i Search Methods:
INSERT INTO [$ndo$dbconfig] VALUES
('IndexHint=Yes;Company=;Table="Item Ledger Entry"; Key="Item No.", "Variant Code";Search Method="-+";Index=')
Quando Navision esegue delle letture sulle tabelle per default viene impostato un ROWLOCK, questo impedisce a SQL Server di determinare in modo automatico la granularità dei locks che potrebbero essere a livello di record, pagina o tabella.
Per consentire a SQL server di determinare la granularità dei locks da impostare è possibile utilizzare il seguente parametro:
DefaultLockGranularity=<Yes,No>
Quando il parametro è impostato a Yes SQL Server sceglierà la granularità dei locks che imposterà, mentre se è impostao a No Navision forzerà l'utilizzo dei ROWLOCKs.