Cum pentru a evita blocajele atunci când se utilizează tabele temporare
Conform articolului de Neil Boyle la SWYNK.COM «Evitarea blocajelor cu tabele temporare»
Neil spune că utilizarea de tabele temporare poate provoca apariția unor blocaje pe serverul de baze de date. Probleme de blocare tempdb pot să apară în 6.5 și 7 versiuni de SQL Server. În versiunea 6.5, de multe ori utilizați selectați. în, pentru a crea un tabel temporar, de exemplu:
selectați *
în #tempTable
de la sursă
În timpul executării acestei cereri, baza de date temporară va fi blocată până la sfârșitul întregului eșantion. Este posibil să dureze o lungă perioadă de timp, dacă tabela sursă conține o cantitate mare de date. În timpul blocaj, utilizatorii nu se pot crea tabele temporare. De fapt, o strangulare care sistemul de tabele Tempdb sunt blocate (sysobjects). În versiunile ulterioare de SQL Server schimbat încuietori model care evită această problemă.
Pentru a atenua efectele posibile încuietori în tempdb este necesară pentru a se asigura că operațiunea va „crea tabel temporar“, realizată cât mai repede posibil. De exemplu, se poate utiliza următoarea construcție:
crea #temp tabel (
.
)
inserați #temp
selectați *
din sourceTable
Acest exemplu creează un tabel temporar la început, care este imediat eliberat în sysobjects. Blocajul este eliberat cât mai curând posibil.
Dacă aveți nevoie pentru a evita instrucțiunile de inserare. În, sau dacă scrie doar un singur modul de cod și nu știu definiția exactă a tabelului, până la execuție, puteți utiliza următorul truc:
selectați *
în #temp
din sourceTable
unde 1 = 0
inserați #temp
selectați *
din sourceTable
Problema descrisă mai sus nu se aplică în MS SQL Server versiunea 7, dar există - este un caz în care s-ar putea crea din greșeală o strangulare pentru orice versiune.