Pada hal-hal menarik dari dunia itu, instruksi dan ulasan. Tingkat paralelisme maksimal - Pilih nilai SQL yang optimal tingkat paralelisme maksimum

Bukan rahasia lagi bahwa memikirkan masalah mengkonfigurasi SQL Server yang terkait dengan peningkatan kinerja, ia para ahli sebagian besar dari mereka membuat pilihan dalam peningkatan perangkat keras. Tetapi apakah selalu dibenarkan? Apakah semua metode pengaturan server sudah digunakan? Diketahui bahwa bekerja dengan parameter konfigurasi dan mengubah nilai defaultnya mampu meningkatkan kinerja dan karakteristik lain dari sistem ini. Di antara opsi konfigurasi ini, konfigurasi SQL memiliki satu opsi dengan banyak pertanyaan, ini adalah opsi - Tingkat paralelisme maksimal (DOP) - inilah tentang hal itu dan mari kita bicarakan.

Tingkat maksimum opsi paralelisme (DOP) menentukan jumlah utas yang SQL Server dapat menyarangkan permintaan dan berarti jumlah prosesor server yang digunakan. Parameter default adalah 0 - tingkat paralelisme maksimum. Misalnya, jika Anda memiliki 24 kernel - maka nilai 'tingkat paralelisme maksimum' akan sama dengan 24 dan pengoptimal, jika itu mempertimbangkannya, dapat menggunakan semua prosesor untuk menjalankan satu instruksi, yaitu, kueri akan diparalelkan oleh 24 aliran. Bagi sebagian besar kasus, ini bagus, tetapi tidak untuk semua orang. Juga, tidak selalu baik, menggunakan nilai parameter default ini. Mengkonfigurasi parameter ini mungkin perlu dibutuhkan, misalnya, dalam situasi berikut: Misalnya, kami memiliki aplikasi di mana semua karyawan membuat informasi tentang operasi harian, dan, pada periode waktu tertentu, setiap pengguna melakukan permintaan yang dibangun Laporan tentang semua operasi pengguna untuk selang waktu. Secara alami, jika celah waktu besar, permintaan ini akan dieksekusi untuk waktu yang lama dan, ketika menginstal DOP secara default, akan mengambil semua prosesor yang tersedia, yang secara alami akan mempengaruhi pengoperasian pengguna lain. Akibatnya, mengubah nilai DOP, kita dapat tanpa perubahan pada kueri itu sendiri untuk meningkatkan waktu respons server SQL dari pengguna lain.
MS merekomendasikan menetapkan nilai sebagai berikut:

Mengatur parameter pada seluruh TSQL untuk server:

Exec sp_configure "max derajat paralelisme", 4; Mengkonfigurasi ulang.

Anda juga dapat mengatur nilai ini untuk kueri TSQL tertentu:

Gunakan AdventureWorks2008r2; Pergi Pilih Productid, Orderqy, Sum (Lineetal) sebagai Totaldrom Sales.SalesOrdetail di mana unitprice< $5.00 GROUP BY ProductID, OrderQty ORDER BY ProductID, OrderQty OPTION (MAXDOP 2); GO

Dalam contoh ini, "Petunjuk" MaxDOP mengubah nilai default dari tingkat parameter paralelisme maks ke 2. Lihat pengaturan saat ini dapat:

Exec sp_configure "Show Advanced", 1; Mengkonfigurasi ulang; Exec sp_configure "max derajat paralelisme"

Sekarang mari kita lihat bagaimana nilai ini dipengaruhi oleh laju eksekusi kueri. Agar kueri uji, ditulis di atas, untuk waktu yang lebih lama, tambahkan yang lain pilih untuk itu. Permintaan akan memperoleh formulir berikut:

< $5.00) dt2 WHERE dt.UnitPrice < $5.00 GROUP BY dt.ProductID, dt.OrderQty ORDER BY dt.ProductID, dt.OrderQty

Pada mesin uji saya, nilai 'derajat paralelisme max' ditampilkan pada 0. MSSQL diluncurkan oleh mesin dengan prosesor 4-core. Saya melakukan serangkaian eksperimen dengan nilai MaxDOP yang berbeda: sama dengan 1 - tanpa paralelisasi kueri; sama dengan 2 - hanya menggunakan 2 inti; Sama 4 - menggunakan semua dan tanpa petunjuk untuk menentukan opsi yang menggunakan sekuel default. Untuk mendapatkan statistik eksekusi, permintaan harus dimasukkan dalam waktu set statistik pada opsi, serta memungkinkan tombol tampilan rencana kueri di studio manajemen. Untuk rata-rata hasil yang diperoleh, saya melakukan setiap kueri dalam siklus 3 kali. Hasil dapat dilihat di bawah ini:

Pilih dt.productid, dt.orderqty, jumlah (dt.linetotal) Sebagai total dari sales.salesorderdetail dt, (pilih * dari sales.salesordetail di mana unitprice< $5.00) dt2 WHERE dt.UnitPrice < $5.00 GROUP BY dt.ProductID, dt.OrderQty ORDER BY dt.ProductID, dt.OrderQty OPTION (MAXDOP 1); SQL Server Execution Times: CPU time = 45942 ms, elapsed time = 46118 ms. SQL Server Execution Times: CPU time = 45926 ms, elapsed time = 46006 ms. SQL Server Execution Times: CPU time = 45506 ms, elapsed time = 45653 ms.

Dalam hal kueri, jelas bahwa ketika menginstal petunjuk (MaxDOP 1), kueri dilakukan tanpa paralelisasi. Waktu eksekusi query rata-rata 45925.66 ms

Pilih dt.productid, dt.orderqty, jumlah (dt.linetotal) Sebagai total dari sales.salesorderdetail dt, (pilih * dari sales.salesordetail di mana unitprice< $5.00) dt2 WHERE dt.UnitPrice < $5.00 GROUP BY dt.ProductID, dt.OrderQty ORDER BY dt.ProductID, dt.OrderQty OPTION (MAXDOP 2); SQL Server Execution Times: CPU time = 51684 ms, elapsed time = 28983 ms. SQL Server Execution Times: CPU time = 51060 ms, elapsed time = 26165 ms. SQL Server Execution Times: CPU time = 50903 ms, elapsed time = 26015 ms.

Saat memasang petunjuk (MaxDOP 2), kueri dilakukan secara paralel dengan 2 CPU, dapat dilihat pada jumlah eksekusi dalam hal eksekusi kueri. Waktu eksekusi query rata-rata 27054.33 ms

Pilih dt.productid, dt.orderqty, jumlah (dt.linetotal) Sebagai total dari sales.salesorderdetail dt, (pilih * dari sales.salesordetail di mana unitprice< $5.00) dt2 WHERE dt.UnitPrice < $5.00 GROUP BY dt.ProductID, dt.OrderQty ORDER BY dt.ProductID, dt.OrderQty OPTION (MAXDOP 4); SQL Server Execution Times: CPU time = 82275 ms, elapsed time = 23133 ms. SQL Server Execution Times: CPU time = 83788 ms, elapsed time = 23846 ms. SQL Server Execution Times: CPU time = 53571 ms, elapsed time = 27227 ms.

Saat memasang petunjuk (MaxDOP 4), kueri dilakukan secara paralel dengan 4 CPU. Waktu eksekusi rata-rata kueri 24735.33 ms

Pilih dt.productid, dt.orderqty, jumlah (dt.linetotal) Sebagai total dari sales.salesorderdetail dt, (pilih * dari sales.salesordetail di mana unitprice< $5.00) dt2 WHERE dt.UnitPrice < $5.00 GROUP BY dt.ProductID, dt.OrderQty ORDER BY dt.ProductID, dt.OrderQty SQL Server Execution Times: CPU time = 85816 ms, elapsed time = 23190 ms. SQL Server Execution Times: CPU time = 85800 ms, elapsed time = 23307 ms. SQL Server Execution Times: CPU time = 58515 ms, elapsed time = 26575 ms.

permintaan dilakukan secara paralel, serta 4 CPU. Waktu permintaan rata-rata 24357.33ms

tautan: http://support.microsoft.com/kb/2023536.

Tujuan: Periksa efek paralelisme SQL untuk bekerja dengan permintaan 1C

Literatur:

Lingkungan Uji:

· Perusahaan Windows Server 2008 R2

· MS SQL Server 2008 R2

· 1C Enterprise 8.2.19.90

Gambar 1. SQL Properties "Umum"


Gambar 2. SQL Properties "Advansed"

Instrumen:

· SQL Server Profiler

· 1C meminta konsol

Permintaan Tes:

MEMILIH

AK. Nama sebagai Nama

DARI

Mendaftar. Pengklasifikasi Tekanan sebagai AK

Koneksi internal Mendaftar. Classifier Tekanan sebagai AK1

Oleh ac.kod \u003d ak1.kod

Persiapan:

Kami menjalankan SQL Server Profiler, mengatur koneksi, menandai acara dan kolom seperti yang ditunjukkan pada Gambar 3.


Gambar 3. Trace Properties

Instal pilihan untuk basis data kami


Gambar 4. Filter Basis

Pengurangan:

· Tingkat paralelisme maks - Mpd

· Ambang SOST untuk paralelisme - biaya

Menguji Rencana Permintaan Sequential (MDOP \u003d 1)


Gambar 5. Minta konsol - Waktu kinerja 20 detik.

Server SQL Server "Max Parallelism" diatur ke 1 (tanpa paralelisme). Kami melihat hasilnya dalam Profiler (Gbr.6)


Gambar 6. Rencana Permintaan Berurutan

SQL Server telah membentuk paket permintaan berurutan, sementara: total pemuatan CPU \u003d 6.750 (s), dan waktu untuk eksekusi kueri \u003d 7.097 (s)

Menguji Rencana Permintaan Paralel (MDOP \u003d 0, Biaya \u003d 5)

Transfer SQL Server ke mode paralelisme (dalam kueri SQL):

Gunakan master;

Exec sp_configure "Tampilkan opsi lanjutan", 1;

Mengkonfigurasi ulang dengan override.

Gunakan master;

exec sp_configure "max derajat paralelisme", 0;

Mengkonfigurasi ulang dengan override.

Lakukan kueri yang sama (Gambar 7)


Gambar 7. Permintaan konsol - Waktu eksekusi 16 detik.

Periksa hasilnya dalam Profiler (Gambar 8)


Gambar 8. Rencana Permintaan Paralel

SQL Server kali ini telah membentuk rencana kueri paralel, sedangkan total pemuatan CPU \u003d 7,905 detik, dan durasi kueri \u003d 3,458 detik

Menguji Rencana Permintaan Sequential (MDOP \u003d 0, Cost \u003d 150)

Kami akan mencoba menyingkirkan paket paralel menggunakan parameter "ambang biaya untuk paralelisme". Secara default, parameter diatur ke 5. Dalam kasus kami, dari pembentukan rencana paralel, dimungkinkan untuk menyingkirkan 150 (dalam kueri SQL):

Gunakan master;

exec sp_configure. "Ambang batas biaya untuk paralelsm", 150 ;

Periksa eksekusi kueri dalam kondisi ini (Gbr. 9)

Gambar 9. Permintaan konsol - Waktu eksekusi 20 detik.

Periksa hasilnya dalam Profiler (Gbr. 10)


Gambar 10. Rencana permintaan berurutan.

SQL Server telah membentuk rencana permintaan berurutan. Total pemuatan CPU \u003d 7.171 detik, waktu eksekusi kueri \u003d 7, 864 detik.

Kesimpulan:

· Melakukan kueri uji pada lingkungan perusahaan 1C menggunakan SQL Server Parallel Plan Server memberikan gain kinerja yang signifikan dibandingkan dengan rencana berurutan (16 detik. Terhadap 20 detik - kemenangan 4 detik.)

· Lakukan kueri uji oleh SQL Server saat menggunakan Rencana Permintaan Paralel membutuhkan waktu dua kali lebih cepat daripada saat menggunakan Rencana Permintaan Berurutan (3,5 detik. Tentang 7.1 detik.)

· Paralelisme SQL Server tidak dapat disesuaikan tidak hanya menggunakan parameter MDOP, tetapi juga parameter "ambang biaya untuk paralelisme"

  • Tutorial.

Manual ini dirancang untuk pemula yang mencari manual sederhana dalam bahasa Rusia untuk instalasi versi bahasa Inggris SQL Server 2012, yang akan digunakan untuk digunakan untuk SharePoint 2013.
Artikel ini bukan untuk para profesional.

Semua pekerjaan dibagi menjadi 3 tahap:

  • Menginstal SQL Server 2012
  • Mengatur Tingkat Maks Pengaturan Konfigurasi Server Paralelisme
  • Pengaturan dengan benar akunDirancang untuk menginstal SharePoint 2013
Juga di artikel ini menjelaskan prosesnya instalasi Microsoft..Kerangka Net. 3.5 di lingkungan MS Server Windows. Standart R2 2012.

Perhatian: Di bawah pemotongan banyak gambar!

Menginstal SQL Server 2012

1. Sebelum instalasi, pastikan ada ruang kosong yang cukup pada hard disk (dalam kasus saya butuh 2,7 GB).
Setelah memulai distribusi, pilih item " Instalasi"Di menu kiri, lalu" klik "item" SQL Server baru berdiri sendiri atau menambahkan fitur ke instalasi yang ada":

2. Mulai Wizard Instalasi. Itu akan memeriksa. Anda dapat mengklik tombol "Tampilkan Detail" dan lihat laporan terperinci:

3. Laporan terperinci. Tekan tombol "OK":

4. Masukkan kunci produk dan tekan tombol "Next":

5. Setuju dengan ketentuan perjanjian lisensi.
Untuk melakukan ini, beri tanda centang " Saya menerima persyaratan lisensi

6. Pada langkah peran pengaturan, pilih item pertama " Instalasi fitur SQL Server". Tekan tombol" Next ":

7. Pada langkah "Pemilihan fitur" merayakan " Layanan Mesin Database", "Alat Manajemen - Dasar"Dan" Alat Manajemen - Lengkap". Lalu tekan tombol" Next ":

8. Kemudian penginstal akan menjalankan cek lagi. Anda dapat mengklik tombol "Tampilkan Detail" dan lihat laporan terperinci:

9. Laporan terperinci. (Pada tahap ini, saya memiliki kesalahan dalam "Microsoft .NET Framework 3.5 diinstal ..." Aturan. Tentang ini di bawah ini). Tekan tombol "Next":

10. Pada langkah "konfigurasi instance", Anda harus mengkonfigurasi instance dari layanan SQL Server.
Saya ulangi bahwa artikel ini ditujukan untuk pemula. Oleh karena itu, kami berasumsi bahwa SQL Server tidak diinstal pada server Anda, yang berarti Anda akan meninggalkan semua pengaturan default. Tekan tombol "Next":

11. Pada langkah ini, Wisaya Instalasi menampilkan persyaratan untuk ruang disk. Tekan tombol "Next":

12. Pada langkah konfigurasi server, Anda harus menentukan akun domain untuk layanan " Mesin basis data SQL Server". Setelah mengisi bidang" Nama Akun "dan" Kata Sandi ", tekan tombol" Next ":

13. Pada langkah "Konfigurasi Mesin Database", cukup untuk menambahkan pengguna saat ini ke administrator SQL Server. Untuk melakukan ini, klik tombol "Tambahkan pengguna saat ini", lalu klik tombol "Next":

14. Pada langkah selanjutnya, tekan tombol "Next":

15. Selanjutnya, Wizard Instalasi kembali mengeksekusi cek dan menampilkan hasilnya. Tekan tombol "Next":

16. Pada langkah "siap menginstal", wizard akan menampilkan informasi ringkasan. Di sini Anda harus mengklik tombol "Instal":

17. Setelah instalasi selesai, informasi tentang operasi yang dihasilkan ditampilkan:

18. Dapat ditembus pada tahap ini untuk me-restart komputer. Dalam beberapa kasus (misalnya, ketika menginstal Microsoft .NET Framework 3.5), Wizard Instalasi itu sendiri akan menampilkan jendela dengan proposal untuk me-restart komputer. Jangan menolak.

Mengatur Tingkat Maks Pengaturan Konfigurasi Server Paralelisme

Secara default, nilai parameter "tingkat paralelisme maks" adalah 0.
SharePoint 2013 mengharuskan parameter ini sama dengan 1.
Mudah diperbaiki!

1. Luncurkan Studio Manajemen Microsoft SQL Server (Mulai - Semua Program - Microsoft SQL Server 2012 - SQL Server Management Studio).

2. Pada layar koneksi ke server, klik tombol "Connect".

3. Klik kanan pada server Anda di jendela " Obyek Explorer."Dan pilih" Properti.":

4. Di jendela Properti Server yang terbuka di menu kiri, pilih Halaman " Maju"Dan lakukan daftar properti di bagian bawah layar. Atur nilai parameter Tingkat paralelisme maks" di 1 dan klik "OK":

5. Jangan tutup SQL Server Management Studio, itu akan berguna.

Mengatur hak akun untuk pengaturan SharePoint 2013

Akun, atas nama instalasi SharePoint 2013, harus memiliki peningkatan hak di SQL Server.
Akun ini disarankan untuk memberikan peran berikut:
  • dbCreator
  • securityAdmin.
  • publik
1. Di Studio Manajemen SQL Server di jendela " Obyek Explorer."Perluas item" Keamanan". Kemudian klik kanan pada intinya" Login."Dan pilih" Login baru.":

2. Dalam bidang "Nama Login", masukkan nama domain Akun dari mana Anda berencana untuk menginstal dan mengkonfigurasi SharePoint 2013.

3. Di menu kiri, pilih halaman " Peran server."Dan periksa peran" DBCreator "dan" SecurityAdmin ", dan pastikan bahwa peran" publik "sudah ditandai. Kemudian klik" OK ":

Sekarang SQL Server siap untuk instalasi SharePoint 2013.

Menginstal Microsoft .NET Framework 3.5 di MS Windows Server 2012 R2 Standart

Pada langkah nomor 9 dari titik " Menginstal SQL Server 2012"Saya punya kesalahan: itu tidak diinstal .NET Framework 3.5.
Untuk mengatasi masalah ini, langkah-langkah berikut harus dilakukan:

1. Anda harus membuka konsol " Manajer Server.".

2. Di menu kiri, pilih item "Dasbor".

3. Di tengah jendela, klik item "Tambah Peran dan Fitur".

4. Di master yang terbuka, lewati "sebelum Anda mulai".

5. Dalam langkah "Jenis Instalasi", pilih item " Instalasi berbasis peran atau berbasis fitur". Tekan tombol" Next ".

6. Pada langkah berikutnya, tinggalkan semuanya secara default dan tekan tombol "Next".

7. Lewati langkah "Peran Server" dengan mengklik tombol "Next".

8. Dalam langkah "Fitur", kami merayakan kotak centang ".NET Framework 3.5 Fitur". Tekan tombol "Next".

9. Setelah menyelesaikan proses instalasi, Anda dapat menutup Wizard "Tambah Peran dan Fitur".

10. Siap!

Semua langit yang baik dan damai di atas kepalamu!

P. Selamat Hari Kosmonautika!

Tingkat paralelisme max (DOP) - opsi konfigurasi SQL Server tambahan, yang dikaitkan dengan banyak pertanyaan dan yang dikhususkan untuk banyak publikasi. Dalam artikel blog-nya, penulis berharap untuk membuat sedikit kejelasan bahwa opsi ini lakukan dan bagaimana menggunakannya.
Pertama, penulis ingin menghilangkan keraguan tentang fakta bahwa opsi yang ditentukan menetapkan berapa banyak prosesor yang dapat menggunakan SQL Server ketika melayani beberapa koneksi (atau pengguna) - bukan! Jika SQL Server memiliki akses ke empat prosesor tidak aktif, dan dikonfigurasi untuk menggunakan keempat prosesor, itu akan menggunakan keempat prosesor, terlepas dari tingkat paralelisme maksimum.
Jadi apa yang diberikan opsi ini? Opsi ini menetapkan jumlah prosesor maksimum yang dapat digunakan SQL Server untuk satu permintaan. Jika permintaan ke SQL Server harus kembali volume besar Data (banyak catatan), kadang-kadang masuk akal untuk secara paralel, membobol beberapa permintaan kecil, yang masing-masing akan mengembalikan bagian baris mereka. Dengan demikian, SQL Server dapat menggunakan beberapa prosesor, dan, akibatnya, pada sistem multiprosesor, sejumlah besar catatan seluruh kueri berpotensi dikembalikan lebih cepat daripada pada sistem prosesor tunggal.
Ada banyak kriteria yang harus diperhitungkan sebelum SQL Server memicu "paralelisme intra kueri" (memecahkan permintaan untuk beberapa aliran), dan tidak ada gunanya detail di sini. Anda dapat menemukannya di BOL, mencari frasa "tingkat paralelisme". Dikatakan bahwa keputusan untuk paralelisasi didasarkan pada aksesibilitas prosesor memori dan, terutama, pada ketersediaan prosesor itu sendiri.
Jadi, mengapa kita perlu memikirkan penggunaan opsi ini - karena, membiarkannya dalam nilai default (SQL Server sendiri memutuskan pada paralelisasi), kadang-kadang Anda bisa mendapatkan efek yang tidak diinginkan. Efek ini terlihat seperti ini:

    Permintaan paralel lebih lambat.

    Waktu eksekusi permintaan dapat menjadi non-deterministik, dan itu dapat menjadi pengguna yang tidak teratur. Waktu eksekusi dapat berubah karena:

      Permintaan terkadang dapat paralel, dan kadang-kadang tidak.

      Permintaan dapat diblokir oleh permintaan paralel jika prosesor telah berlebihan sebelum ini.

Sebelum kita melanjutkan, penulis ingin memperhatikan bahwa tidak ada kebutuhan khusus untuk menyelam ke dalam organisasi paralelisme internal. Jika Anda tertarik dengan ini, Anda dapat membaca artikel "Paralel Query Processing" dalam buku on line, di mana informasi ini diatur secara lebih rinci. Penulis percaya bahwa hanya ada dua hal penting yang harus Anda ketahui tentang organisasi internal paralelisme:

    Permintaan paralel dapat menghasilkan lebih banyak utas daripada yang ditentukan dalam opsi "Tingkat paralelisme". DOP 4 dapat menghasilkan lebih banyak dua belas benang, empat untuk permintaan dan aliran tambahan yang digunakan untuk menyortir, stream, unit dan rakitan, dll.

    Parallelisasi permintaan dapat memicu spids yang berbeda untuk menunggu dengan jenis tenis cxpacket atau 0x0200. Ini dapat digunakan untuk menemukan spid-spid yang ada di standby ketika operasi paralel, dan miliki di Sysprocesses waittype: cxpacket. Untuk memfasilitasi tugas ini, penulis menawarkan untuk menggunakan prosedur tersimpan di blog-nya: track_waitstats.

Jadi "Permintaan dapat dilakukan lebih lambat saat paraleling" Mengapa?

    Jika sistem memiliki sangat lemah bandwidth. Subsistem disk, kemudian ketika menganalisis permintaan, dekomposisi dapat dilakukan lebih lama daripada tanpa paralelisme.

    Kemungkinan blok data atau memblokir data berkisar untuk prosesor yang dihasilkan oleh yang lain digunakan secara paralel dan meluncurkan proses selanjutnya, dll.

    Jika tidak ada indeks untuk predikat, yang mengarah pada pemindaian tabel. Operasi paralel dalam permintaan dapat menyembunyikan fakta bahwa permintaan akan selesai lebih cepat dengan rencana eksekusi yang konsisten dan dengan indeks yang benar.

Dari semua ini mengikuti rekomendasi untuk memeriksa eksekusi kueri tanpa paralelisme (DOP \u003d 1), ini akan membantu mengidentifikasi kemungkinan masalah.
Efek paralelisme yang disebutkan di atas, dengan sendirinya harus membawa Anda keluar bahwa mekanisme internal paralelisasi permintaan tidak cocok untuk digunakan dalam aplikasi OLTP. Ini adalah aplikasi yang merupakan perubahan waktu eksekusi dapat mengiritasi pengguna dan di mana server secara simultan melayani banyak pengguna tidak mungkin untuk memilih rencana eksekusi paralel karena aplikasi proses kerja prosesor ini.
Oleh karena itu, jika Anda akan menggunakan paralelisme, maka kemungkinan besar akan diperlukan, untuk tugas ekstraksi data (data warehouse), dukungan untuk sistem pengambilan keputusan atau pelaporan, di mana tidak ada banyak permintaan, tetapi mereka sulit dan dieksekusi pada Server yang kuat dengan volume memori operasional yang besar.
Jika Anda memutuskan untuk menggunakan paralelisme, nilai apa yang harus diinstal untuk DOP?. Praktik yang baik untuk mekanisme ini adalah bahwa jika Anda memiliki 8 prosesor, maka instal DOP \u003d 4, dan ini dengan tingkat probabilitas yang besar akan menjadi instalasi optimal. Namun, tidak ada jaminan bahwa itu akan berhasil. Satu-satunya cara untuk memastikan ini adalah untuk menguji nilai yang berbeda untuk DOP. Selain itu, penulis ingin menawarkannya, berdasarkan pengamatan empiris dewan, tidak pernah menetapkan angka ini lebih dari setengah dari jumlah prosesor yang ada dalam stok. Jika penulis memiliki prosesor kurang dari enam, itu akan menetapkan DOP dalam 1, yang hanya melarang paralelisasi. Dia bisa membuat pengecualian jika memiliki basis data yang mendukung proses hanya satu pengguna (beberapa teknologi ekstraksi data atau tugas pelaporan), dalam hal ini, dalam urutan pengecualian, akan mungkin untuk menginstal DOP dalam 0 (nilai default) itu Mengizinkan SQL Server membuat keputusan tentang perlunya paralel kueri.
Sebelum menyelesaikan artikel, penulis ingin memperingatkan Anda tentang fakta bahwa pembuatan indeks paralel tergantung pada angka yang Anda pasang untuk DOP. Ini berarti bahwa Anda mungkin ingin mengubahnya pada saat membuat atau menciptakan kembali indeks untuk meningkatkan kinerja operasi ini, dan, tentu saja, Anda dapat menggunakan kueri Petunjuk MaxDOP, yang memungkinkan Anda untuk mengabaikan nilai yang diatur dalam konfigurasi dan dapat digunakan dalam jam beban minimum.
Akhirnya, permintaan Anda dapat melambat saat sejajar karena kesalahan, jadi pastikan bahwa paket layanan terakhir diinstal pada server Anda.

Buat Proc Track_Waitstats (@num_Samples int \u003d 10 , @ Delainnum int \u003d 1 @ Delaintype nvarchar ( 10 ) \u003d "Menit") As - T. Davidson - Prosedur tersimpan ini disediakan \u003d seperti \u003d tanpa jaminan, - Dan tidak ada hak. - Penggunaan sampel skrip yang disertakan tunduk pada persyaratan - Ditentukan di http://www.microsoft.com/info/cpyright.htm - @num_samples adalah berapa kali untuk menangkap waitstats, - Default adalah 10 kali. Interval penundaan default adalah 1 menit - Delaynum adalah interval penundaan. DELOUTTYPE menentukan apakah - Interval penundaan adalah menit atau detik - Buat tabel waitstats jika tidak ada, jika tidak terpotong Atur nocount pada jika tidak ada (pilih 1 Dari sysobject di mana nama \u003d "waitstats") Buat tabel waitstats (varchar ( 80 ), Meminta numerik ( 20 ,1 ), Numerik ( 20 ,1 ), Numerik ( 20 ,1 ), Sekarang dateTime default getdate ()) lainnya truncate table waitstats dbcc sqlperf (waitstats, hapus) - membersihkan waitstats menyatakan @i int, @ delay varchar ( 8 ), @ Dt varchar ( 3 ), @ Sekarang DateTime, @ Total Wait Numerik ( 20 ,1 ), @ Endtime datetime, @ begintime datetime, @ hr int, @ min int, @ detik int pilih @I \u003d 1 Pilih @dt \u003d case lower (@delaytype) ketika "menit" kemudian "m" ketika "menit" kemudian "m" ketika "menit" kemudian "m" ketika "mi" ketika "mi" ketika "mi" ketika "mi" Ketika "m" maka "m" ketika "detik" maka "s" ketika "kedua" maka "s" ketika "detik" maka "s" ketika "s" kemudian "s" kemudian "s" maka "s" Tunda Tunda Akhir jika @DT tidak di ("s", "m") mulai cetak "Silakan berikan tipe penundaan E.g. detik atau menit" Kembali akhir jika @dt \u003d "s" mulai pilih @sec \u003d @ delainnum% 60 Pilih @min \u003d cast ((@delaynum / 60 ) Sebagai int) pilih @hr \u003d cast ((@min / 60 ) Sebagai int) pilih @min \u003d @ min% 60 Akhir jika @dt \u003d "m" mulai pilih @sec \u003d 0 Pilih @min \u003d @ delainnum% 60 Pilih @hr \u003d cast ((@delaynum / 60 ) Sebagai int) End Pilih @Delay \u003d Kanan ("0" + Konversi (Varchar ( 2 ), @ Jam), 2 2 ), @ min), 2 ) + ":" + + Kanan ("0" + konversi (varchar ( 2 ), @ Sec), 2 ) Jika @hr\u003e 23 atau @min\u003e 59 atau @sec\u003e 59 Mulai pilih. "HH: mm: waktu tunda SS tidak bisa\u003e 23:59:59" Pilih "Tunda Interval dan Ketik:" + Konversi (Varchar ( 10 ), @ Delainnum) + "," + @delaytype + "mengkonversi ke" + @delay kembali akhir sementara (@i<= @num_samples) begin insert into waitstats (, requests, ,) exec ("dbcc sqlperf(waitstats)" ) select @i = @i + 1 WaitFor Delay @Delay End --- Buat Laporan Waitstats Jalankan Get_Waitstats --//--//--//--//--//--//--//--//--//-//--//--//--//--//--//--//--//--/ Buat Proc Get_Waitstats sebagai - Prosedur tersimpan ini disediakan \u003d seperti \u003d tanpa jaminan, dan - Tidak ada hak. - Penggunaan sampel skrip yang disertakan tunduk pada ketentuan yang ditentukan - Di http://www.microsoft.com/info/cpyright.htm. -- - Proc ini akan membuat daftar listing waitstats tunggu dengan - Persentase - Dapat dijalankan ketika track_waitstats adalah eksekusi Atur Nocount pada Deklarasi @now DateTime, @ TotalWait Numerik ( 20 ,1 ), @ endtime datetime, @ begintime datetime, @ hr int, @ min int, @ detik int selecter @ now \u003d max (sekarang), @ begintime \u003d min (sekarang), @ endtime \u003d maks (sekarang) dari waitstats di mana \u003d " Total " --- kurangi pelayan, tidur, dan sumber daya_Queue dari total Pilih @totalwait \u003d jumlah () + 1 Dari waitstats di mana tidak di ("tunggu", "tidur", "sumber daya_queue", "total", "*** total ***") dan sekarang \u003d @now - Masukkan total yang disesuaikan, peringkat dengan persentase turun Hapus waitstats di mana \u003d "*** total ***" dan sekarang \u003d @now memasukkan ke dalam waitstats pilih "*** total ***", 0 , @ TotalWait, @ TotalWait, @ Sekarang Pilih ,, Persentase \u003d Cast ( 100 * / @ TotalWait sebagai numerik ( 20 ,1 )) dari waitstats di mana tidak di ("menunggu", "tidur", "sumber daya_queue", "total") dan sekarang \u003d @now pesanan dengan persentase desc

Dalam posting ini, kami hanya akan berbicara tentang MS SQL Server. Jika Anda akan "mencoba kebahagiaan" untuk menggunakan 1C dengan Oracle, DB2, Postrgre kepada Anda informasi ini tidak akan berguna. Tetapi Anda perlu memahami bahwa dalam 1C, terutama ada ahli pada MS SQL Server. Para ahli tentang DB2 muncul upaya dari IBM. Anda dapat berdebat baik atau buruk untuk waktu yang lama, DBMS ini penting, satu, paling "halus" 1C bekerja dengan MS SQL Server. Dilihat oleh pesan terbaru dengan "depan" bekerja lebih atau kurang layak dengan DB2. Meskipun saya pribadi memiliki pengalaman menetapkan 1C untuk bekerja dengan DB2 lebih dalam versi 8.1 - semuanya entah bagaimana tidak terlalu. Bagaimanapun, pilihan DBMS lain harus diduga - baik-baik saja - baik opsi yang tidak dalam MS SQL (Cluster dengan load balancing, grid, dll.), Atau keuangan (Oracle sudah dibeli) atau platform (semua di Linux) .

Jadi agar apa yang perlu Anda lakukan dengan MS SQL Server:

1) Mengkonfigurasi jumlah minimum dan maksimum memori. Minimum adalah setengah dari memori sistem. Sistem memori maksimum tanpa 2GB. Ini dilakukan melalui studio manajemen - di properti server:

2) Jika prioritas tidak diinstal pada tab Prosesor - Anda perlu menginstal

3) Tingkat paralelisme maksimum dimasukkan ke dalam 1.

4) termasuk SQL Server Agent, menyesuaikan email basis data - tidak ada yang sulit di sana, saya tidak akan menjelaskan secara detail.

5) Kustomisasi paket layanan:
Umum:
a) Pembaruan statistik - setiap 2 jam
b) DBCC Freeproccache - setiap 2 jam
Untuk setiap basis data:
a) cadangan penuh
b) perbedaan cadangan
c) defragmentasi indeks - setiap hari
d) Indeks Perestroika - pada malam hari di akhir pekan
e) memeriksa integritas pangkalan - sebulan sekali pada malam hari di akhir pekan

6) Saya sarankan untuk menginstal model pemulihan untuk setiap basis data (dalam properti) sesederhana. Jika Anda tidak memiliki sistem 24/7 dan kurang dari 1000 pengguna di pangkalan, tidak ada cluster toleran kesalahan dan Anda tidak menandatangani SLA di mana kami berasumsi dalam kasus keluar dari peralatan apa pun untuk mengembalikan data ke detik (dan bukan karena cadangan terakhir) rekomendasi ini akan masuk akal. Kalau tidak, Anda akan segera untuk waktu yang lama dan mencerminkan ke mana harus melahirkan log Tranzaction

7) Hapus database TEMPDB dari database biasa ke disk lain - bahkan jika Anda harus mengkonfigurasi ulang array RAID dan mengurangi kinerjanya. Kalau tidak, 1 pengguna akan dapat melumpuhkan pekerjaan orang lain. Jika Anda memiliki akselereator perangkat keras alih-alih hard disk, maka tentu saja Anda tidak dapat memisahkan dan meletakkan tempdb di atasnya, tetapi hanya jika ada

8) Tetapkan sarana pemantauan - misalnya, saya suka Spotlight http://www.quest.com/spotlight-on-sql-server/

9) Periksa diri Anda dengan Microsoft Best Practice Analizer - http://www.microsoft.com/download/en/details.aspx?id\u003d15289 - Alat yang luar biasa yang membantu tidak hanya dengan pengaturan, tetapi juga dengan memecahkan banyak masalah.

Sekarang sebentar untuk apa yang kami lakukan semua ini:

1) memori. Nilai minimum hanya akan menghemat Anda dari "gangguan" ketika server SQL untuk beberapa alasan lain yang diketahui tidak menggunakan semua memori yang tersedia untuk itu. Harus makan semuanya! Nilai maksimum akan menghemat Anda dari swap jika pengoptimal yang sama dengan pengoptimal memori SQL Server akan memutuskan bahwa itu akan tetap menyakitinya ....

3) Poin yang sangat penting - Immo perlu dimasukkan ke dalam 1 di semua sistem transaksional. Pertama, ini mencegah bagian dari kunci antara proses yang berbeda mencoba menjalankan 1 permintaan, masing-masing, melindungi kita dari beberapa kesalahan "aneh". Kedua ... 1 "Bunuh" Permintaan akan dapat menarik semua sumber daya server, yang agak tidak benar dalam kaitannya dengan sisa pengguna sistem. Parameter menentukan apakah 1 permintaan dapat diproses sebagai banyak inti prosesor.

5) Tentang statistik dan pembersihan cache prosedural - ini "pada audiensi" dan di sini kita sering melupakan Reyndexation. Sementara itu, prosedur ini cukup penting, terutama dengan peningkatan volume pangkalan, kepentingannya meningkat. Kadang-kadang hingga 60% kinerja hilang pada fragmentasi indeks.

7) Jika ada akselerator perangkat keras atau hanya 2 disk dengan kecepatan akses yang berbeda, saya akan mengkonsolonsikan ulang tentang menyorot grup file dalam database dan membagi tabel individual ke berbagai array disk, dengan waktu akses yang berbeda. Lagi pula, Anda setuju, pH "barang di gudang" dan buku referensi "Penyimpanan informasi tambahan" 2 dari objek persyaratan untuk penyimpanan yang di-root. Tidak perlu menyimpan semua file dan gambar pada array cepat dalam database - Anda dapat memilihnya secara terpisah, tidak secepat, tetapi di mana ada banyak tempat (dan tidak takut dengan banyak file untuk diunduh, oleh cara).