SqlServer e parallelismo, la chiave per incrementare le performance in pochi secondi

Nelle configurazioni di SQLServer c’è una sezione denominata Parallelismo.

Questa sezione contiene due chiavi che di default sono impostate con dei parametri eccessivamente aggressivi, e che non danno beneficio nella maggior parte dei casi. Agendo su queste due chiavi, si può migliorare le perfomance senza operare complesse attività di tuning.

  1. Massimo grado di parallelismo (Maximum Degree of Parallelism) è impostato di default a 0, il che significa senza limiti. Fa da se che SqlServer utilizza tutte le CPU disponibili durante l’esecuzione di una query. Se eseguiamo esclusivamente query molto pesanti e su un grandissimo numero di dati, questa configurazione è corretta, ma in un uso applicativo, questo approccio limita la concorrenza, creando dei colli di bottiglia. E’ preferibile limitare il parallelismo dai un numero di socket che permetta un livello di concorrenza sostenibile.

    Ad esempio, un una configurazione con 4 core, sentiamo il valore a 2.

  2. Costo soglia per parallelismo (Cost Threshold for Parallelism) è impostato di default a 5. E’ un valore un pò troppo basso, che induce l’ottimizzatole a valutare piani alternativi di esecuzione che possano utilizzare più thread contemporaneamente.

Anche questa impostazione è ideale per applicazioni di BI o OLTP, ma totalmente inadeguato per applicazioni con IO dati generico, come CRM e gestionali.

Va assolutamente aumentato ad almeno 30, ma c’è chi consiglia di portarlo anche a 50.

Personalmente ho riscontrato un beneficio immediato da un cliente che lamentava rallentamenti, con un crollo del carico della CPU dal 70% al 30% e un immediato raddoppio delle operazioni batch eseguite al secondo. Un must per l’ottimizzazione delle performance.

Sono delle impostazioni poco note ai più, ma fidatevi che avrete un server molto più performante con un operazione di pochi secondi.

Windows 10 bloccato alla build 10240

L’altro giorno sono tornato a casa e ho trovato il PC con Windows completamente andato, dopo un Windows Update.
Non c’è stato modo di ripristinarlo, quindi ho deciso di ripartire con un installazione pulita.

Reinstallato tutto, ho ripristinato tutte le applicazioni che uso abitualmente (grazie Chocolatey), ma mi sono accorto che Docker per Windows non partiva dicendo che non avevo una build 10586 o superiore.

A quel punto ho iniziato ad indagare, perchè Windows Update mi diceva che non ci sono aggiornamenti, e così ho scoperto che ci sono altre persone bloccate a questa build.

La soluzione che mi ha permesso di superare l’empasse è la seguente:

Andate su https://www.microsoft.com/en-gb/software-download/windows10 e scaricate Windows 10 Creators Update. (Precedentemente si era installa da sola).

A quel punto basta seguire i vari passaggi per avere Windows aggiornato all’ultima build.

Tutto qui, ma come al solito le cose semplici se nessuno te le dice diventano complicate.

Scrivere un immagine ISO da MacOS-OSX su una chiavetta USB

Ormai le unità CD/DVD sono completamente scomparse dai nostri Mac, ma spesso rimane la necessità di installare qualche distro Debian o Ubuntu su un PC che a sua volta non ha il DVD.

Il problema nasce una volta scaricato il file ISO dal sito della distro: come faccio a metterlo sulla chiavetta?

Fortunatamente il Mac ha tutto quello che serve a bordo, ma dobbiamo operare da command line, quindi cominciamo con l’aprire il terminal.

La prima cosa da fare è trasformare l’immagine ISO in un formato avviabile da chiavetta USB, perchè nel suo formato base non è “Bootable”.

Il comando da esegire è:

hdiutil convert -format UDRW -o Downloads/ubuntu.img  Downloads/ubuntu-16.04.2-desktop-i386.iso

Il file che otterremo ha l’estensione .dmg, è un default del Mac, ma va bene lo stesso.

Il passo successivo è infilare la chiavetta USB nello slot, e vedere come è stata montata dal sistema.

per fare ciò, eseguiamo il seguente comando:

diskutil list

il risultato sarà:

dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage Macintosh HD 499.4 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3

/dev/disk1 (internal, virtual):
#: TYPE NAME SIZE IDENTIFIER
0: Macintosh HD +499.0 GB disk1
Logical Volume on disk0s2
3AE302D4-9B15-463E-911C-87EF564A95E9
Unencrypted

/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *7.9 GB disk2
1: EFI 209.7 MB disk2s1

Il device che andremo ad utilizzare è quello marcato come External – Physical, nel mio caso il /dev/disk2, ma può variare a seconda delle configurazioni.

Prima di tutto andiamo a recuperare tutto lo spazio utile con:

diskutil partitionDisk /dev/disk2 1 "Free Space" "unused" "100%"

Attenzione, questa operazione cancellera tutto il conetenuto della chiavetta.

Quindi proseguiamo con linstallazione dell’immagine appena creata con il seguente comando:

sudo dd if=~/Downloads/ubuntu.img.dmg of=/dev/rdisk3 bs=1m

Ci vuole un pò di pazienza, perchè la scrittura non da evidenza della progressione, quindi attendiamo finchè il cursore non ritorna riportando la quantità di dati scritti.

Probabilmente il sistema ci restituirà anche un bell’errore, perchè il Mac non riconosce il filesystem. Se vi capita, semplicemente confermate l’espulsione, altrimenti, date il segente comando:

diskutil eject /dev/disk2

A questo punto avete la vostra chiavetta avviabile con l’installazione pronta per essere eseguita sul vostro PC.

Risolvere il proprio IP pubblico dalla shell di Linux

Quando abbiamo a disposizione un browser siamo abitati a digitare whatismyip o qualche altro sito che risolve l’indirizzo di provenienza della richiesta.

Se invece abbiamo bash aperto, il modo più rapito è

dig +short myip.opendns.com @resolver1.opendns.com

o meglio aggiungetevi un alias bashrc cosi non bisogna ricordarsi la sintassi

alias wanip='dig +short myip.opendns.com @resolver1.opendns.com'

a questo punto basterà digitare

$ wanip

per vedersi risolto il proprio indirizzo pubblico.

DDNS con CloudFlare

Anche questo blog, alla pari di molti siti utilizza CloudFlare come server DNS e Reverse Proxy di sicurezza.
E’ un servizio molto comodo e funzionale, però non prevede funzionalità di DDNS (Dynamic DNS), o almeno non è supportato dai principali firmware dei router, perché un pò complesso.
Comunque se come me avete il blog su un PC a casa, utilizzando le API di CloudFlare, potete impostare l’IP pubblico configurando un DDNS custom.

Vediamo come fare.

A differenza dei DDNS comuni in cui basta fare una richiesta ad un URL passando Username e Password, con Clocloudflare-1udFlare e le sue API, bisogna aggiornare a tutti gli effetti il record DNS del vostro sito web come fareste dall’interfaccia, ma in modo programmatico via API.

Per prima cosa bisogna farsi assegnare un API KEY dal pannello amministrativo di CloudFlare.

Quindi con la key aprite il seguente URL:

https://www.cloudflare.com/api_json.html?a=rec_load_all&tkn=LA_TUA_API_KEY&email=LA_TUA_EMAIL&z=IL_TUO_DOMINIO

Il rerver vi restituirà una JSON con il contenuto completo del vostro DNS. Cercate il record che volete aggiornare e segnatevi il rec_id per il nome WWW come ad esempio:

"rec_id": "111111111",
"rec_hash": "d3422c1234324e1ea1b23432a3fa12afa",
"zone_name": "straus.it",
"name": "www.straus.it",
"display_name": "www"

Individuato il rec_id avete tutto quello che serve per comporre una stringa da inserire nel router con i vostri parametri:

https://www.cloudflare.com/api_json.html?a=rec_edit&tkn=LA_TUA_API_KEY&id=IL_REC_ID_DEL_TUO_HOST&email=LA_TUA_EMAIL&z=IL_TUO_DOMINIO&type=A&name=www&content=@IP&service_mode=0&ttl=1

A seconda del router che utilizzate, l’IP da aggiornare viene espresso in modo diverso, nel caso del mio è @IP, sostituitelo con il vostro.

Ecco fatto, adesso l’HOST del vostro dominio viene aggiornato ad ogni cambio di IP, non serve più fare CNAME che puntano a servizi di DDNS come NOIP o DYNDNS.

Ridurre un disco VHD o VHDX in Hyper-V da PowerShell

Dopo aver tribolato per mezza giornata cercando di ridimensionare un disco in Hyper-V utilizzando gli strumenti della GUI, sono passato a PowerShell e da li ci sono riuscito senza incorrere in problemi di spazio disco e di permessi, e in metà del tempo stimato dall’interfaccia grafica, specie per ridimensionare la partizione.

I passaggi sono:

1. Ferma la VM

2. Monta il VHD con il comando mount-vhd dalla linea di comando:

mount-vhd path\drive.vhdx -passthru | get-disk | get-partition | get-volume
Questo comando fornisce tutte le informazioni relative alle partizioni contenute nel VHD, compreso la lettera del disco, la partizione di avvio (NON RIDIMENSIONARLA) e lo spazio recuperabile.

3. Ora puoi eseguire resize-partition, che ridurrà la partizione alla dimensione desiderata.

resize-partition –driveletter E -size 100GB
-driveletter è la lettera del disco che troviamo con il primo comando, –size è la dimensione a cui vogliamo portare la partizione.

4. Quindi smontiamo il disco con dismount-vhd:

dismount-vhd path\drive.vhdx

5. L’ultimo comando serve a ridimensionare il VHD:

resize-vhd path\drive.vhdx -ToMinimumSize

Questa operazione non è possibile se il disco è VHD, devi prima convertirlo in VHDX:

Convert-VHD path\drive.vhd path\drive.vhdx

Quest’ultima operazione la puoi fare anche da Hyper-V Manager.

Alleggerire Windows 7 pulendo WinSxS

Guardando la treemap del disco, mi sono accorto che c’è una cartella “winsxs” che non era presente nelle vecchie versioni di Windows ante Vista.

Mi è saltata all’occhio proprio perchè è bella grande, e mi sono subito dato da fare per capire cosa sia.

In sostanza è lo store dove Windows tiene copia dei componenti (le vecchie dll comprensive di file Ini e altre amenità) per non dover più accedere a dischi o altri supporti che regolarmente Windows XP ci chiedeva e che non trovavamo più.

Quindi in winsxs vengono salvate tutte le copie dei componenti necessari al sistema e  ai programmi installati per goni versione installata.

Ciò significa che ad ogni service pack, Windows si tiene sia i componenti nuovi che quelli vecchi, casomai fosse necessario disinstallare la SP (ma quando mai?).

La soluzione per recurerare un pò di spazio è lanciare questo comando:

DISM /online /Cleanup-Image /SpSuperseded

che rimuoverò tutti i files di backup creati durante l’installazione della SP. Non è un gran chè ma è sempre spazio recuperato, specie per chi ha un disco SSD.