Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa yang dimaksud dengan kunci baris, halaman, dan tabel? Dan kapan mereka diakuisisi?

Kunci Baris

Kunci baris adalah tingkat perincian penguncian terendah yang mungkin dilakukan di SQL Server. Ini berarti satu atau lebih baris tertentu akan dikunci, dan baris yang berdekatan masih tersedia untuk dikunci dengan kueri bersamaan.

Kunci Halaman

Penguncian halaman di SQL Server akan mengunci data senilai 8K bahkan ketika kueri Anda hanya membutuhkan 10 byte dari halaman. Jadi kueri Anda akan mengunci data tambahan yang tidak Anda minta dalam kueri Anda.

Hobt Lock

Ketika sebuah tabel dipartisi dengan "SQL Server Table partitioning" ada kemungkinan satu partisi akan dikunci (Hobt adalah singkatan dari Heap atau B-Tree)

Catatan: Eskalasi kunci ke kunci HOBT dinonaktifkan secara default. jalankan ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO) untuk mengaktifkan eskalasi kunci HOBT.

Kunci Tabel

Kunci meja akan mengunci seluruh tabel.

Apa itu Laman Data

Microsoft SQL Server mengatur semua datanya di "Halaman Data" yang dapat menampung data senilai 8K. Ini berarti bahwa untuk setiap akses data di SQL Server 8K informasi akan dibaca.

Halaman data hanya dapat berisi informasi dari satu tabel dan tata letak halaman didokumentasikan dengan baik di MSDN

Fakta bahwa SQL Server akan selalu membaca halaman data lengkap juga memberi Anda gambaran mengapa lebih suka menggunakan kunci tingkat halaman. Implikasi dari penguncian tingkat halaman adalah Anda mungkin mengunci lebih banyak data daripada yang Anda kira.

Sebagai contoh, asumsikan kita memiliki tabel dengan ukuran record total 1024 byte dengan indeks berkerumun pada bidang ID . Saat kita menjalankan query berikut:SELECT * from MyTable (xlock) where ID = 123 tidak hanya record tersebut yang akan dikunci, tetapi (tergantung pada isi halaman) maksimal 3 record tambahan juga akan dikunci.

Kapan kunci ini diperoleh

Kueri akan diuraikan oleh gubernur kueri dan kunci yang diperlukan akan ditentukan dan diminta dari manajer kunci. SQL Server akan mencoba membuat keseimbangan antara kinerja dan pertentangan untuk menentukan strategi penguncian.

SQL Server juga mengikuti sistem "eskalasi kunci" yang akan mengurangi granularitas penguncian ketika lebih dari 5000 kunci jenis tertentu diperoleh. Lihat artikel ini tentang eskalasi kunci untuk informasi lebih lanjut.

Perilaku ini dapat diubah menggunakan petunjuk penguncian dengan penekanan pada petunjuk , dalam kueri Anda dapat menentukan per tabel jenis kunci apa yang Anda inginkan. SQL Server akan mencoba memenuhi permintaan Anda, tetapi tetap menerapkan eskalasi penguncian.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa CTE lebih baik daripada kursor/tabel turunan/subqueries/tabel temp dll?

  2. Temukan karakter non-ASCII di kolom varchar menggunakan SQL Server

  3. Menggunakan kembali SqlCommand?

  4. Hirarki Teknologi Memori/Penyimpanan dan SQL Server

  5. Cara Menampilkan Query dan Hasil di Tab Terpisah di SQL Server Management Studio (SSMS) - Tutorial SQL Server / TSQL Part 15