DevAdmin Blog

Blog di Ermanno Goletto (Microsoft MVP Directory Services - MCITP - MCTS - MCSA - MCP)
posts - 887, comments - 449, trackbacks - 13

My Links

News

Avatar

Curriculum Vitae

Visualizza il profilo di Ermanno Goletto su LinkedIn


Il contenuto di questo blog e di ciascun post viene fornito “così come é”, senza garanzie, e non conferisce alcun diritto. Questo blog riporta il mio personale pensiero che non riflette necessariamente il pensiero del mio datore di lavoro.

Logo Creative Commons Deed


Logo SysAdmin.it SysAdmin.it Staff


Logo TechNet Forum TechNet Italia @ForumTechNetIt Follow TechNet Forum on Twitter


Logo MVP


Ermanno Goletto Follow ermannog on Twitter

Article Categories

Archives

Post Categories

Blogs

Friends

Knowledge Base

MVP Sites

Resources

Configurare l'Index Hinting e la Lock Granularity in SQL Server

Quando Navision viene installato su SQL Server è possibile forzare l'utilizzo di uno specifico indice e modificare la granularità dei bloccaggi.

Sommario

Creazione della tabella di parametri di configurazione

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.

Configurazione dell'Index Hinting

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=')

Configurazione della Lock Granularity

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.

Print | posted on Monday, March 20, 2006 3:02 PM |

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 5 and 2 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET