Manajemen kunci transaksional. Menyetel konfigurasi ke kunci terkelola Mode penguncian otomatis tidak diperbolehkan dalam transaksi

Alasan utama untuk beralih ke kunci terkelola adalah:

  • Alasan utamanya adalah rekomendasi 1C: Ahli berdasarkan indikasi atau 1C: PKS
  • Masalah dengan pekerjaan pengguna bersamaan ()
  • Menggunakan Oracle, PostgreSQL dan.

Biaya pekerjaan:

Inti dari kunci yang dikelola

Saat bekerja dalam mode otomatis kontrol pemblokiran 1C: Perusahaan menetapkan tingkat isolasi data yang tinggi dalam transaksi di tingkat DBMS. Ini memungkinkan Anda untuk sepenuhnya mengecualikan kemungkinan menerima data yang tidak konsisten atau salah tanpa upaya khusus dari pengembang aplikasi.

Ini nyaman dan pendekatan yang tepat di jumlah kecil pengguna aktif. Harga kemudahan pengembangan adalah sejumlah kunci yang berlebihan di tingkat DBMS. Kunci ini terkait baik dengan kekhasan penerapan mekanisme penguncian dalam DBMS itu sendiri, dan dengan fakta bahwa DBMS tidak dapat memperhitungkan (dan tidak memperhitungkan) makna fisik dan struktur 1C: Objek metadata perusahaan.

Saat bekerja dengan perebutan sumber daya yang tinggi (sejumlah besar pengguna), di beberapa titik efek redundansi kunci menjadi terlihat dalam hal kinerja dalam mode paralel.

Setelah konfigurasi dialihkan ke mode terkontrol, platform diaktifkan fungsi tambahan"Lock manager" dan kontrol atas integritas data sekarang dilakukan tidak di sisi DBMS, tetapi di sisi server 1C. Ini meningkatkan beban pada perangkat keras server 1C (prosesor yang lebih cepat dan lebih banyak memori diperlukan), dan sebenarnya menyebabkan sedikit perlambatan (beberapa persen), namun, ini meningkatkan situasi dengan penguncian jauh lebih signifikan (lebih sedikit penguncian karena penguncian aktif). objek, dan bukan pada kombinasi tabel, lebih sedikit area pemblokiran dan, dalam beberapa kasus, masa pakai kunci baca lebih pendek, yaitu tidak sampai akhir transaksi). Ini meningkatkan paralelisme secara keseluruhan.


Konfigurasi baru perusahaan 1C segera diimplementasikan dalam mode terkontrol.

  • Pertanyaan: Apakah bisa dilakukan audit terlebih dahulu, kemudian transfer ke UB?

Jawaban: Ada kemungkinan, audit akan berfungsi sebagai pembenaran tambahan untuk kelayakan transfer ke kunci yang dikelola, serta menilai kontribusi kunci otomatis terhadap perlambatan keseluruhan dan apakah upaya tambahan diperlukan selain transfer.

  • Pertanyaan: Untuk transfer ke UB, akses seperti apa yang perlu Anda sediakan - RDP, TeamViewer? Atau bisakah saya mengirimi Anda file konfigurasi?

Jawaban: Kami mencoba untuk tidak membatasi satu teknologi tertentu akses jarak jauh, cocok teknologi akses jarak jauh apa pun... Jika tidak masalah bagi Anda, maka RDP lebih praktis.
Kami dapat melakukan optimasi pada file konfigurasi yang dikirim, tetapi kemudian kami tidak akan dapat men-debug beberapa data nyata dan Anda harus menguji lebih hati-hati. Jika kami melakukan optimasi pada salinan database, maka kami dapat mengujinya secara menyeluruh sebelum kami mengirimkan hasil pekerjaan kepada Anda.

  • Pertanyaan: Kami memiliki 10 programmer penuh waktu yang mengubah sesuatu di konfigurasi setiap hari. Penyimpanan konfigurasi bersama digunakan." Bagaimana pengaturan interaksi saat transfer ke UB? Atau haruskah semua programmer pergi berlibur?

Jawaban: Sebagai aturan, perubahan kami dibuat dalam beberapa hari. Sisa waktu dihabiskan untuk menguji perubahan yang dibuat, termasuk dari sudut pandang logika yang diperlukan yang ditentukan oleh bisnis dan bukan oleh pertimbangan teknis. kita kita dapat membuat perubahan pada file terpisah konfigurasi cf, dan kemudian programmer Anda akan menambahkannya ke repositori. Anda tidak perlu mengirim siapa pun untuk berlibur... Di opsi interaksi lainnya, Anda hanya perlu menyetujui objek mana yang akan diambil oleh pengembang Anda, sehingga kami membuat rencana kerja yang nyaman bagi kedua belah pihak. Sebagai aturan, pengembang Anda tidak perlu merekam seluruh konfigurasi, atau memberi kami "roda" selama sehari.

Mekanisme kunci transaksional digunakan untuk akses pengguna secara bersamaan ke DBMS.
Transaksi adalah jenis operasi yang tidak dapat dipisahkan, di mana keadaan basis berubah. Ini adalah kuantum minimum perubahan: Anda tidak dapat melakukan setengah transaksi; jika transaksi tidak selesai, database akan digulung kembali ke keadaan awal.
Karena transaksi menangkap larik data, ada nuansa dalam mengakses larik ini: misalnya, satu transaksi mengubah data, sementara yang lain mencoba membacanya. Hasil pembacaan mungkin salah, karena tidak akan menyala perubahan terbaru... Oleh karena itu, isolasi transaksi bekerja pada tingkat DBMS. Tingkat isolasi berikut dimungkinkan:

  • Baca tanpa komitmen- ketika satu transaksi mengubah array, transaksi lain tidak dapat mengubahnya, tetapi dapat membaca. Tingkat isolasi terendah.
  • Baca berkomitmen- ketika satu transaksi mengubah array, yang lain tidak dapat mengubah atau membacanya
  • Bacaan berulang- saat satu transaksi membaca array, transaksi lain tidak dapat mengubahnya, tetapi dapat membaca
  • Serialaizable- saat satu transaksi membaca array, transaksi lain tidak dapat mengubah atau membacanya. Semua operasi berurutan. Tingkat isolasi maksimum.

Jika 1C: Konfigurasi perusahaan diatur mode pemblokiran otomatis, kemudian tingkat isolasi transaksi dipilih oleh DBMS. Dalam kasus MS SQL, ini akan menjadi level Bacaan yang dapat diulang atau level Serializable, yaitu, isolasi data mendekati maksimum. Ini memecahkan masalah dengan kebenaran data, tetapi dapat menyebabkan munculnya kunci di tingkat DBMS selama pekerjaan pengguna yang intensif. Oleh karena itu, 1C: Enterprise memiliki fungsinya sendiri untuk bekerja dengan kunci, yang diaktifkan dengan mengaktifkan mode kunci terkelola. Dalam hal ini, tingkat isolasi transaksi MS SQL akan dikomit Baca. Platform itu sendiri akan mengisolasi data tanpa bergantung pada DBMS.

Mengaktifkan mode pemblokiran terkelola terjadi di properti konfigurasi:

Selain itu, mode pemblokiran dapat diatur untuk objek konfigurasi tertentu:

Jika konfigurasi secara keseluruhan diatur Mode otomatis terkunci, maka semua transaksi di semua register akan bekerja dalam mode otomatis, terlepas dari mode yang diatur untuk objek konfigurasi. Jika Dikelola - maka dengan cara yang sama, semua transaksi akan dikelola. Jika konfigurasi diatur ke Otomatis dan Terkendali, maka mode untuk setiap objek akan ditentukan oleh pengaturannya.

Ada satu poin untuk mode Otomatis dan Terkendali. Satu transaksi untuk pengguna dapat mewakili beberapa transaksi dari sudut pandang platform. Misalnya, menavigasi dokumen secara interaktif di seluruh register membuat dua transaksi adalah catatan dari dokumen itu sendiri, dan di dalam transaksi ini adalah catatan dari sekumpulan baris dengan register. Bergantung pada mode kontrol kunci untuk dokumen itu sendiri dan register yang dipindahkan olehnya, empat situasi dimungkinkan:

  1. Mode dokumen Otomatis, mode daftar Otomatis ->
  2. Mode dokumen Dikelola, mode register Dikelola -> tulis dengan register dalam mode terkontrol
  3. Mode dokumen Otomatis, mode daftar Terpandu -> tulis dengan mendaftar dalam mode otomatis
  4. Mode dokumen Dikelola, mode daftar Otomatis -> pengecualian (kesalahan)

Pertanyaan 06.59 ujian 1C: Profesional di platform. Saat memposting dokumen ke register mana pun, jika dokumen memiliki mode manajemen kunci transaksional otomatis, dan register memiliki mode terkontrol (dalam properti konfigurasi, opsi "Otomatis dan terkelola" digunakan), maka tindakan tersebut akan menghasilkan:

Jawaban yang benar adalah yang kedua, kita tentukan dengan transaksi pertama, jika otomatis, maka semuanya otomatis.

Pertanyaan 06.60 ujian 1C: Profesional di platform. Saat memposting dokumen ke register, jika dokumen memiliki mode manajemen kunci transaksional terkelola, dan register memiliki otomatis (opsi "Otomatis dan terkelola" digunakan di properti konfigurasi), maka pengeposan tersebut akan menghasilkan:

  1. untuk terjadinya situasi kesalahan
  2. seluruh transaksi akan dilakukan secara otomatis
  3. seluruh transaksi akan dijalankan dengan cara yang terkendali

Jawaban benar pertama ditentukan oleh transaksi pertama, jika dikendalikan, maka kesalahan.

Pertanyaan 06.61 ujian 1C: Profesional di platform. Saat memposting dokumen ke register mana pun, jika dokumen memiliki mode manajemen kunci transaksional otomatis, dan register memiliki mode terkontrol (opsi "Terkontrol" digunakan dalam properti konfigurasi), maka tindakan tersebut akan menghasilkan:

  1. ke situasi kesalahan
  2. seluruh transaksi akan dilakukan secara otomatis
  3. seluruh transaksi akan dijalankan dengan cara yang terkendali

Mekanisme Manajemen Kunci Data dalam suatu transaksi, ini memungkinkan pemblokiran data yang dapat diubah tidak melalui sistem manajemen basis data yang digunakan, tetapi melalui platform. Manajemen kunci data tersebut dilakukan bukan dalam hal data DBMS, tetapi dalam hal domain. Ini memungkinkan penguncian yang lebih tepat untuk diterapkan dan meningkatkan konkurensi pengguna.

Konfigurasi 1C: Enterprise 8 dapat beroperasi di salah satu dari tiga mode pengelolaan kunci dalam transaksi:

  • mobil;
  • dikelola - mode standar untuk konfigurasi baru;
  • otomatis dan terkontrol.

DI mode otomatis manajemen kunci data menggunakan tingkat isolasi transaksi baca dan serial yang dapat diulang yang disediakan oleh sistem manajemen basis data. Tingkat isolasi transaksi ini memberikan pembacaan data yang konsisten dan konsisten, dan tidak ada tindakan tambahan yang diperlukan dari pengembang untuk mengelola kunci.

Modus terkontrol memungkinkan untuk meningkatkan paralelisme pengguna dalam mode kerja klien-server karena penggunaan tingkat isolasi transaksi database yang lebih rendah (Baca Berkomitmen). Saat menulis data ke transaksi, objek bahasa yang disematkan secara otomatis mengunci data yang diperlukan. Pengembang perlu mengelola kunci data ketika logika bisnis membutuhkan pembacaan data yang konsisten dan konsisten dalam suatu transaksi.

Otomatis dan terkontrol mode memungkinkan untuk menggunakan kemampuan untuk mengelola kunci dalam transaksi hanya untuk beberapa objek konfigurasi. Mode ini dapat digunakan untuk mengoptimalkan konkurensi pengguna dengan objek aplikasi individual (misalnya, dengan beberapa dokumen yang paling sering digunakan), atau untuk secara bertahap mentransfer konfigurasi besar ke mode manajemen kunci transaksi.

Dalam bentuk ringkasan, perbedaan antara interlock otomatis dan interlock terkontrol diperlihatkan dalam tabel berikut:

Paling sering, kebutuhan untuk mengelola kunci data dalam suatu transaksi muncul dalam proses pengiriman dokumen, ketika Anda perlu membaca dan kemudian menulis data yang diubah ke tabel yang sama. Misalnya, jika saldo diperiksa selama pengiriman dokumen.

Khusus untuk ini, set catatan register akumulasi dan register akuntansi memiliki properti BlokUntukPerubahan.

Jika Anda perlu mengontrol saldo, dan kemudian mencatat pergerakan dalam register yang sama, maka properti ini harus ditetapkan untuk kumpulan catatan register ini di properti Gerakan.

Efek dari properti ini sama seperti jika pengembang secara mandiri menginstal (menulis dalam kode) kunci terkelola 1C: Enterprise 8. Platform akan secara otomatis mengatur kunci terkelola yang diperlukan saat menulis kumpulan catatan ini. Akibatnya, transaksi terkelola lainnya yang menggunakan kunci serupa tidak akan dapat mulai membaca register ini hingga transaksi saat ini berakhir.

Di bawah ini adalah contoh kontrol "manual" dari kunci data saat membaca data register akumulasi. AkuntansiNomenklatur dalam memproses posting dokumen Faktur penjualan... Dalam contoh ini, kunci terkelola dibuat dan disetel seluruhnya melalui bahasa yang disematkan.

Sistem 1C: Enterprise memungkinkan Anda menggunakan dua mode kerja dengan database: mode penguncian otomatis dalam transaksi dan mode penguncian terkontrol dalam transaksi.

Perbedaan mendasar antara mode ini adalah sebagai berikut. Mode penguncian otomatis tidak mengharuskan pengembang untuk mengambil tindakan apa pun untuk mengelola kunci dalam transaksi untuk melakukannya. Aturan-aturan ini disediakan oleh platform 1C: Enterprise melalui penggunaan tingkat isolasi transaksi tertentu dalam DBMS tertentu. Mode operasi ini adalah yang termudah bagi pengembang, tetapi dalam beberapa kasus (misalnya, dengan pekerjaan simultan yang intensif jumlah yang besar pengguna), tingkat isolasi transaksi yang digunakan dalam DBMS tidak dapat memberikan paralelisme yang memadai, yang memanifestasikan dirinya dalam bentuk sejumlah besar konflik kunci saat pengguna bekerja.

Saat beroperasi dalam mode kunci terkontrol, sistem 1C: Enterprise menggunakan lebih banyak lagi level rendah isolasi transaksi dalam DBMS, yang secara signifikan dapat meningkatkan paralelisme pengguna dari solusi yang diterapkan. Namun, tidak seperti mode pemblokiran otomatis, tingkat ini isolasi transaksi tidak bisa lagi dengan sendirinya menegakkan semua aturan untuk bekerja dengan data dalam suatu transaksi. Oleh karena itu, ketika bekerja dalam mode terkontrol, pengembang diharuskan mengelola kunci yang diatur dalam transaksi secara mandiri.

Dalam bentuk ringkasan, perbedaan antara interlock otomatis dan interlock terkontrol diperlihatkan dalam tabel berikut:

Mengatur mode pemblokiran dalam konfigurasi

Konfigurasi memiliki properti Mode Kontrol Kunci Data. Setiap objek konfigurasi aplikasi juga memiliki properti Mode Kontrol Kunci Data.
Mode kontrol kunci data untuk seluruh konfigurasi dapat diatur ke Otomatis, Terkelola (default untuk konfigurasi baru), dan Otomatis dan Terkelola. Nilai Otomatis dan Terkendali berarti bahwa mode pemblokiran yang sesuai akan digunakan untuk semua objek konfigurasi, terlepas dari nilai yang ditetapkan untuk masing-masing objek. Nilai Otomatis dan terkontrol berarti bahwa untuk objek konfigurasi tertentu mode yang ditentukan dalam properti mode kontrol penguncian Data: Otomatis atau Terkendali akan digunakan.
Perlu dicatat bahwa mode kontrol penguncian data yang ditentukan untuk objek metadata diatur untuk transaksi yang dimulai oleh sistem 1C: Enterprise saat bekerja dengan data objek ini (misalnya, saat memodifikasi data objek).
Jika, misalnya, operasi penulisan objek dilakukan dalam transaksi yang diprakarsai oleh pengembang (metode StartTransaction()), maka mode kontrol penguncian data akan ditentukan oleh nilai parameter mode Penguncian
metode StartTransaction (), bukan nilai properti dari objek metadata Data Lock Control Mode.
Secara default, Mode Kunci diatur ke Mode Manajemen DataLock. Otomatis, jadi
untuk menggunakan mode penguncian terkelola dalam transaksi eksplisit, Anda harus menentukan nilai parameter ini
Mode Manajemen Kunci Data.

Bekerja dengan kunci terkelola menggunakan bahasa yang disematkan

Untuk mengelola kunci dalam transaksi, objek bahasa bawaan DataLock digunakan. Objek ini dapat dipakai menggunakan konstruktor dan memungkinkan Anda untuk mendeskripsikan ruang kunci dan mode kunci yang diperlukan. Untuk mengatur semua kunci yang dibuat, gunakan metode Lock () dari objek DataLock. Jika metode ini dijalankan dalam suatu transaksi (eksplisit atau implisit), kunci diperoleh dan akan dilepaskan secara otomatis pada akhir transaksi. Jika metode Lock () dijalankan di luar transaksi, maka tidak ada kunci yang akan diperoleh.

Kondisi ditetapkan pada kesetaraan nilai bidang dengan nilai yang ditentukan atau pada kemunculan nilai bidang dalam rentang yang ditentukan.
Kondisi dapat diatur dengan dua cara:

  • dengan secara eksplisit menentukan nama dan nilai bidang (metode SetValue () dari objek DataLockElement);
  • dengan menentukan sumber data yang berisi nilai yang diperlukan (properti DataSource dari objekDataLockElement).

Untuk setiap elemen pemblokiran, satu dari dua mode pemblokiran dapat diatur:

  • bersama,
  • luar biasa.

Tabel kompatibilitas kunci terkelola terlihat seperti ini

Mode penguncian bersama berarti bahwa data yang dikunci tidak dapat diubah oleh transaksi lain hingga akhir transaksi saat ini.
Mode penguncian eksklusif berarti bahwa data yang dikunci tidak dapat diubah oleh transaksi lain hingga akhir transaksi saat ini, juga tidak dapat dibaca oleh transaksi lain yang memperoleh kunci bersama pada data tersebut.

Fitur kerja dalam mode "Otomatis dan terkontrol"

Saat beroperasi dalam mode kontrol interlock otomatis dan terkontrol, ada dua hal yang perlu dipertimbangkan:

Terlepas dari mode yang ditentukan untuk transaksi tertentu, sistem akan mengatur kontrol yang sesuai
pemblokiran.
Mode manajemen kunci ditentukan oleh transaksi tingkat tertinggi. Dengan kata lain, jika pada saat transaksi dimulai, transaksi lain dimulai, maka transaksi yang dimulai hanya dapat dilakukan dalam mode yang ditetapkan untuk transaksi yang sudah berjalan.

Mari kita pertimbangkan fitur yang terdaftar secara lebih rinci.

Fitur pertama adalah bahwa meskipun mode manajemen kunci otomatis digunakan untuk transaksi, sistem akan mengatur tambahan kunci terkelola yang sesuai saat menulis data dalam transaksi ini. Ini menyiratkan bahwa transaksi yang dijalankan dalam mode kunci terkelola mungkin bertentangan dengan transaksi yang dijalankan dalam mode manajemen kunci otomatis.

Fitur kedua adalah bahwa mode manajemen kunci yang ditentukan untuk objek metadata dalam konfigurasi atau ditentukan pada awal transaksi secara eksplisit (sebagai parameter metode StartTransaction ()) hanya mode "diinginkan". Mode manajemen kunci yang sebenarnya di mana transaksi akan dijalankan tergantung pada apakah panggilan untuk memulai transaksi ini adalah yang pertama, atau transaksi lain telah dimulai di sesi sistem 1C: Enterprise ini.

Misalnya, jika Anda ingin mengelola kunci saat menulis kumpulan catatan register, saat memposting dokumen, maka mode penguncian terkontrol harus diatur baik untuk register itu sendiri maupun untuk dokumen, karena penulisan kumpulan catatan register akan dilakukan di transaksi dibuka ketika dokumen itu ditulis.