PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

C#, Entity Framework Core &PostgreSql :memasukkan satu baris membutuhkan waktu 20+ detik

Setelah banyak pengujian, saya akhirnya menemukan bahwa masalahnya bukan pada kerangka kerja Entitas atau NpgSql sama sekali, tetapi penundaan yang saya lihat disebabkan oleh cache tulis. Saya selalu menulis file 30MB sebelum memasukkan baris ke tabel 1 dan saya yakin bahwa penulisan file selesai setelah File.WriteAllBytes kembali sehingga tidak akan memengaruhi pernyataan waktu di masa mendatang. Namun pada lapisan OS itu tidak benar-benar selesai menulis ke disk pada saat pernyataan penyisipan dijalankan menyebabkan pernyataan penyisipan ditunda secara artifisial.

Saya membuktikan ini dengan kode berikut:

Stopwatch sw1 = new Stopwatch();
sw1.Start();
File.WriteAllBytes(myBytes);
sw1.Stop();

Thread.Sleep(1000);

Stopwatch sw2 = new Stopwatch();
sw2.Start();
MethodThatInsertsIntoTable1();
sw2.Stop();

stopwatch 1 menunjukkan bahwa File.WriteAllBytes selalu membutuhkan waktu sekitar 500 md, lalu stopwatch 2 berdurasi sekitar 20 hingga 30 detik.

Jika saya mengubah MethodThatInsertsIntoTable1 untuk disisipkan ke tabel yang berbeda maka masih membutuhkan waktu 20 hingga 30 detik terlepas dari tabelnya.

Jika saya meningkatkan Thread.Sleep(1000) menjadi Thread.Sleep(30000) maka stopwatch 2 mencatat bahwa penyisipan membutuhkan waktu kurang dari 10 milidetik.

Ini menunjukkan bahwa bahkan setelah File.WriteAllBytes mengembalikan kontrol ke program, itu tidak benar-benar selesai menulis file ke disk.

Lingkungan tempat saya menjalankan adalah linux pada raspberry pi. Tes kecepatan tulis mengonfirmasi bahwa kecepatan tulis saya ke kartu sd hanya lebih dari 1MB/s yang akan selaras dengan hasil yang saya lihat, 20-30 detik untuk menulis file 30MB, itu tidak mungkin dilakukan dalam 500ms stopwatch 1 mengatakan itu.

Pengguna lain tampaknya mengalami masalah karena ini di File.WriteAllBytes tidak tidak memblokir

Setelah menambahkan HDD USB SSD eksternal ke raspberry pi dan mengubah untuk menyimpan file di sana, menyimpan file hanya membutuhkan 0,5 detik dan masalahnya hilang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ekspor skrip CREATE untuk database

  2. Bagaimana saya bisa memastikan bahwa tampilan terwujud selalu up to date?

  3. Adakah cara untuk * tidak * menggunakan pernyataan yang disiapkan sisi server di Postgresql?

  4. PostgreSQL menemukan semua kemungkinan kombinasi (permutasi) dalam kueri rekursif

  5. PostgisDialect vs PostgreSQLDialect atau keduanya?