Saya memiliki sepotong kode yang melakukan sisipan ke dalam tabel yang sangat dinormalisasi. Tabel memiliki jumlah kolom mulai dari ~ 100 hingga 300+. Ini adalah SQL Server 2008 R2, berjalan pada Windows Server 2008.
Setiap memasukkan terdiri dari memasukkan ke sejumlah tabel di bawah transaksi yang sama. Beberapa sisipan dikelompokkan oleh NHibernate, tetapi beberapa tidak bisa, tetapi semuanya masih dalam transaksi yang sama.
Ketika saya melakukan insert untuk mengatakan 500 kali dengan berulang kali memanggil sepotong kode yang melakukan insert, saya mendapatkan rata-rata ~ 360 ms.
Yang aneh adalah, ketika saya menjalankan kode uji secara bersamaan menggunakan 4 proses (jalankan exe yang sama dari 4 perintah yang berbeda meminta di bawah windows server 2008), kinerja penyisipan per panggilan menjadi jauh lebih baik. Saya melihat semburan yang bergerak secepat 90 ms (hampir X4 lebih cepat). Saya mengukur waktu penyisipan dari kode.
Karena 4 proses tidak tahu apa-apa tentang satu sama lain, saya berasumsi bahwa ini ada hubungannya dengan SQL Server, tapi saya sama sekali tidak tahu mengapa. Saya ingin tahu mengapa hal ini terjadi dan jika ada konfigurasi yang memungkinkan saya untuk mendapatkan kinerja yang sama ketika memasukkan tidak terlalu sering.
Saran mengenai metode pemantauan SQL Server untuk memahami apa yang terjadi di tingkat db sama-sama disambut.
sumber
beberapa server / cpus / os mengingat polanya. seperti cache.
Karena Anda melakukan hal yang sama 4 kali, saya yakin ada cara yang dapat memotong sudut, Apa yang saya duga adalah bahwa cara pertama Anda melakukannya, itu menganggapnya sebagai satu proses panjang (contoh 1) tetapi dengan cara kedua adalah melihat kode yang digunakan kembali dan menjalankannya seperti cache (example2) atau bisa jadi proses pertama adalah besar agar sesuai dengan semuanya dalam (ram example3).
example1: 0111110000110111110000111011111000011110111110000
contoh2: 0111110000 | 11 | 0111110000 | 111 | 0111110000 | 1111 | 0111110000
example3: 0111110000011111000001111100000111110000 example3: loop: 0111110000
Saya tahu server ubuntu melakukan ini dengan permintaan mysql berulang. Saya dapat menyimpannya dalam cache, meskipun satu-satunya perbedaan waktu adalah 10-40mm tetapi bertambah. Ketika saya masih di sekolah ada kelas yang menunjukkan Anda harus membuat program (perl / php) menggunakan cache itu menjadi lebih cepat.
Tapi, itu mungkin tergantung pada program, bahasa apa itu, apa itu dikompilasi atau bagaimana itu diprogram.
sumber