Alex's Weblog

Weblog di Ermanno Goletto (Codename Alex - A Learning EXperience)
posts - 438, comments - 4214, trackbacks - 294

My Links

News

Il blog è stato
trasferito al
 seguente link:


DevAdmin Blog

Add my blog to Live

Foto

Curriculum Vitae


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 MCTS

Logo MCSA

Logo MCP

Logo Microsoft Certified Business Management Solutions Professional

Microsoft Certified Business Management Solutions Specialist


Logo UGIdotNET UGIdotNET Contributor


Logo UGISS UGISS Contributor


Logo SysAdmin.it SysAdmin.it Staff


Article Categories

Archives

Post Categories

Blogs

Database

Development

Friends

IT

Knowledge Base

Links

MBS

MCP

MVP Sites

User Groups

Virtualization

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 lunedì 20 marzo 2006 18:02 |

Feedback

Gravatar

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

Good to know about $ndo$dbconfig table. Please
Can I have this article in English!!! (eMail: milindamin@yahoo.com, milind.amin@techprocess.co.in)
26/06/2007 10:51 | MilindAmin
Gravatar

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

freshwater pearl earrings


wholesale pearl earrings


shell pearl earrings


gemstone earrings


12/10/2011 13:13 | lewis
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET