Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
SQL Server Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
Penyelang-selingan kueri adalah konfigurasi sistem dalam mode tabulasi yang dapat meningkatkan performa kueri dalam skenario dengan konkurensi tinggi. Secara bawaan, mesin tabular Analysis Services berfungsi dalam mode first-in, first-out (FIFO) terkait dengan CPU. Dengan FIFO, misalnya, jika satu kueri dari mesin penyimpanan yang mahal dan mungkin lambat diterima, kemudian diikuti oleh dua kueri cepat lainnya, maka kueri cepat tersebut berpotensi terhalang menunggu kueri mahal tersebut selesai. Perilaku ini ditampilkan dalam diagram berikut, yang menunjukkan Q1, Q2, dan Q3 sebagai kueri masing-masing, durasinya, dan waktu CPU.
Interleaving kueri dengan bias kueri singkat memungkinkan kueri bersamaan untuk berbagi sumber daya CPU, yang berarti kueri cepat tidak diblokir di belakang kueri lambat. Waktu yang diperlukan untuk menyelesaikan ketiga kueri masih hampir sama, tetapi dalam contoh kami Q2 dan Q3 tidak diblokir hingga akhir. Bias kueri pendek berarti kueri cepat, didefinisikan oleh seberapa banyak CPU yang sudah digunakan oleh setiap kueri pada titik waktu tertentu, dapat dialokasikan proporsi sumber daya yang lebih tinggi dibandingkan dengan kueri yang berjalan lama. Dalam diagram berikut, kueri Q2 dan Q3 dianggap cepat dan dialokasikan lebih banyak CPU daripada Q1.
Interleaving kueri dimaksudkan untuk memiliki sedikit atau tidak ada dampak performa pada kueri yang berjalan dalam isolasi; satu kueri masih dapat menggunakan CPU sebanyak yang dilakukannya dengan model FIFO.
Pertimbangan penting
Sebelum menentukan apakah interleaving kueri tepat untuk skenario Anda, ingatlah hal-hal berikut:
- Query interleaving hanya berlaku untuk model impor. Ini tidak memengaruhi model DirectQuery.
- Interleaving kueri hanya mempertimbangkan CPU yang digunakan oleh kueri mesin penyimpanan VertiPaq. Ini tidak berlaku untuk operasi mesin pengolah rumus.
- Sebuah kueri DAX tunggal dapat menghasilkan beberapa kueri pada mesin penyimpanan VertiPaq. Kueri DAX dianggap cepat atau lambat berdasarkan CPU yang digunakan oleh kueri mesin penyimpanannya. Kueri DAX adalah unit pengukuran.
- Operasi refresh secara default dilindungi dari interleaving kueri. Operasi refresh yang berjalan lama dikategorikan dengan cara berbeda dari kueri yang berjalan lama.
Konfigurasi
Untuk mengonfigurasi interleaving kueri, tetapkan properti Threadpool\SchedulingBehavior. Properti ini dapat ditentukan dengan nilai-nilai berikut ini:
| Nilai | Description |
|---|---|
| -1 | Otomatis. Mesin akan menentukan tipe antrean. |
| 0 (default untuk SSAS 2019) | Pertama masuk, pertama keluar (FIFO). |
| 1 | Kecenderungan penelusuran pendek. Mesin secara bertahap membatasi laju kueri yang berjalan lama ketika berada di bawah tekanan demi kueri yang lebih cepat. |
| 3 (default untuk Azure AS, Power BI, SSAS 2022 dan yang lebih baru) | Bias kueri singkat dengan pembatalan cepat. Meningkatkan waktu respons kueri pengguna dalam skenario konkurensi tinggi. Hanya berlaku untuk Azure AS, Power BI, SSAS 2022, dan yang lebih baru. |
Saat ini, properti PenjadwalanBehavior hanya dapat diatur dengan menggunakan XMLA. Di SQL Server Management Studio, cuplikan XMLA berikut mengatur properti SchedulingBehavior ke 1, bias kueri singkat.
<Alter AllowCreate="true" ObjectExpansion="ObjectProperties" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object />
<ObjectDefinition>
<Server xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
<ID>myserver</ID>
<Name>myserver</Name>
<ServerProperties>
<ServerProperty>
<Name>ThreadPool\SchedulingBehavior</Name>
<Value>1</Value>
</ServerProperty>
</ServerProperties>
</Server>
</ObjectDefinition>
</Alter>
Penting
Menghidupkan ulang instans server diperlukan. Di Azure Analysis Services, Anda harus menjeda lalu melanjutkan server, memulai ulang secara efektif.
Properti tambahan
Dalam kebanyakan kasus, SchedulingBehavior adalah satu-satunya properti yang perlu Anda tetapkan. Properti tambahan berikut ini memiliki default yang harus berfungsi di sebagian besar skenario dengan bias kueri singkat, namun dapat diubah jika diperlukan. Properti berikut tidak berpengaruh kecuali pengacakan kueri diaktifkan dengan mengatur properti SchedulingBehavior.
ReservedComputeForFastQueries - Mengatur jumlah inti logis yang dipesan untuk kueri cepat . Semua kueri dianggap cepat sampai mengalami penurunan performa karena telah menghabiskan sejumlah waktu CPU. ReservedComputeForFastQueries adalah bilangan bulat antara 0 dan 100. Nilai defaultnya adalah 75.
Satuan ukuran untuk ReservedComputeForFastQueries adalah persentase inti. Misalnya, nilai 80 di server dengan 20 inti mencoba mencadangkan 16 core untuk kueri cepat (sementara tidak ada operasi refresh yang dilakukan). ReservedComputeForFastQueries membulatkan ke atas ke seluruh jumlah inti terdekat. Disarankan Anda tidak mengatur nilai properti ini di bawah 50. Ini karena kueri cepat dapat dikurangi dan berlawanan dengan keseluruhan desain dari fitur tersebut.
DecayIntervalCPUTime - Bilangan bulat yang mewakili waktu CPU dalam milidetik yang dihabiskan kueri sebelum membusuk. Jika sistem berada di bawah tekanan CPU, kueri yang rusak dibatasi pada inti yang tersisa yang tidak dicadangkan untuk kueri cepat. Nilai defaultnya adalah 60.000. Ini mewakili 1 menit waktu CPU, bukan waktu kalender yang berlalu.
ReservedComputeForProcessing - Mengatur jumlah inti logis yang dipesan untuk setiap operasi pemrosesan (pembaharuan data). Nilai properti adalah bilangan bulat antara 0 dan 100, dengan nilai default 75 dinyatakan. Nilai mewakili persentase inti yang ditentukan oleh properti ReservedComputeForFastQueries. Nilai 0 (nol) berarti operasi pemrosesan tunduk pada logika interleaving kueri yang sama dengan kueri, sehingga dapat dirusak.
Meskipun tidak ada operasi pemrosesan yang dilakukan, ReservedComputeForProcessing tidak berpengaruh. Misalnya, dengan nilai 80, ReservedComputeForFastQueries pada server dengan 20 inti mencadangkan 16 inti untuk kueri cepat. Dengan nilai 75, ReservedComputeForProcessing kemudian akan mencadangkan 12 dari 16 inti untuk operasi refresh, dan menyisakan 4 inti untuk kueri cepat sementara operasi pemrosesan sedang berjalan dan menggunakan CPU. Seperti yang dijelaskan di bagian Kueri yang di-decay di bawah ini, 4 core yang tersisa (tidak dicadangkan untuk kueri cepat atau operasi pemrosesan) masih akan digunakan untuk kueri dan operasi pemrosesan cepat jika dalam keadaan menganggur.
Properti tambahan ini terletak di bawah simpul properti ResourceGovernance . Di SQL Server Management Studio, contoh cuplikan XMLA berikut mengatur properti DecayIntervalCPUTime ke nilai yang lebih rendah dari default:
<Alter AllowCreate="true" ObjectExpansion="ObjectProperties" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object />
<ObjectDefinition>
<Server xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
<ID>myserver</ID>
<Name>myserver</Name>
<ServerProperties>
<ServerProperty>
<Name>ResourceGovernance\DecayIntervalCPUTime</Name>
<Value>15000</Value>
</ServerProperty>
</ServerProperties>
</Server>
</ObjectDefinition>
</Alter>
Kueri yang kadaluarsa
Batasan yang dijelaskan di bagian ini hanya berlaku jika sistem berada di bawah tekanan CPU. Misalnya, satu kueri, jika itu satu-satunya yang berjalan dalam sistem pada waktu tertentu, dapat menggunakan semua inti yang tersedia terlepas dari apakah itu telah membusuk atau tidak.
Setiap kueri mungkin memerlukan banyak tugas mesin penyimpanan. Ketika inti dalam pool untuk kueri yang telah aus tersedia, pemroses tugas akan memeriksa kueri terlama yang berjalan berdasarkan waktu kalender yang berlalu untuk melihat apakah kueri tersebut telah menggunakan Maximum Core Entitlement (MCE). Jika tidak, maka pekerjaan berikutnya akan dijalankan. Jika ya, kueri terlama berikutnya dievaluasi. Kueri MCE ditentukan berapa banyak interval pembusukan yang sudah digunakannya. Untuk setiap interval pembusukan yang digunakan, MCE dikurangi berdasarkan algoritma yang ditunjukkan pada tabel di bawah ini. Ini berlanjut hingga kueri selesai, batas waktu habis, atau MCE dikurangi menjadi satu inti.
Dalam contoh berikut, sistem memiliki 32 inti, dan CPU sistem berada di bawah tekanan.
ReservedComputeForFastQueries adalah 60 (60%).
- 20 inti (19,2 dibulatkan ke atas) dikhususkan untuk kueri cepat.
- 12 inti yang tersisa dialokasikan untuk kueri yang membusuk.
DecayIntervalCPUTime adalah 60.000 (1 menit waktu CPU).
Siklus hidup kueri mungkin sebagai berikut, selama tidak kedaluwarsa atau selesai:
| Panggung | Kedudukan | Eksekusi/penjadwalan | MCE |
|---|---|---|---|
| 0 | Cepat | MCE terdiri dari 20 core (dicadangkan untuk kueri cepat). Kueri dieksekusi dalam urutan FIFO berkaitan dengan kueri cepat lainnya pada 20 inti yang dipesan. Interval pembusukan 1 menit waktu CPU habis. |
20 = MIN(32/2˄0, 20) |
| 1 | Membusuk | MCE diatur untuk menggunakan 12 core (12 core tersebut tidak dicadangkan untuk kueri cepat). Pekerjaan dijalankan berdasarkan ketersediaan hingga MCE. Interval penurunan 1 menit waktu CPU telah digunakan. |
12 = MIN(32/2^1, 12) |
| 2 | Membusuk | MCE diatur ke 8 core (seperempat dari total 32 core). Pekerjaan dijalankan berdasarkan ketersediaan hingga MCE. Interval peluruhan selama 1 menit waktu CPU telah habis. |
8 = MIN(32/2˄2, 12) |
| 3 | Membusuk | MCE telah diatur ke 4 inti. Pekerjaan dijalankan berdasarkan ketersediaan hingga MCE. Interval peluruhan selama 1 menit waktu CPU telah habis. |
4 = MIN(32/2˄3, 12) |
| 4 | Membusuk | MCE diatur ke 2 inti. Pekerjaan dijalankan berdasarkan ketersediaan hingga MCE. Interval peluruhan selama 1 menit waktu CPU telah habis. |
2 = MIN(32/2˄4, 12) |
| 5 | Membusuk | MCE diatur ke 1 inti. Pekerjaan dijalankan berdasarkan ketersediaan hingga MCE. Interval pembusukan tidak berlaku karena kueri telah mencapai batas terbawah. Tidak ada penurunan lebih lanjut karena minimal 1 inti telah tercapai. |
1 = MIN(32/2˄5, 12) |
Jika sistem berada di bawah tekanan CPU, setiap kueri akan diberikan jumlah inti yang tidak lebih banyak dari MCE-nya. Jika semua inti saat ini digunakan oleh kueri dalam MCEs masing-masing, maka kueri lain menunggu hingga inti tersedia. Ketika inti prosesor tersedia, kueri tertua yang berhak dipilih berdasarkan waktu kalender yang telah berlalu. MCE adalah batas di bawah tekanan; ini tidak menjamin jumlah inti pada waktu tertentu.