У меня есть несколько процессов, которые пишут в MongoDB.Мне кажется, что когда один из процессов выполняет fsync для сброса на диск, все остальные процессы ожидают и не могут записать.
Я следую инструкции на https://metacpan.org/pod/MongoDB::MongoClient.
Вот мой код:
my $time_stamp_0 = time();
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time_stamp_0);
my $time_stamp = sprintf("%d-%02d-%02dT%02d:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec);
printf "%s DEBUG - before fsync(async) at: %s \n", $time_stamp, $time_stamp_0;
$client->fsync({ async => 1 });
#$client->fsync();
my $time_stamp_1 = time();
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time_stamp_1);
$time_stamp = sprintf("%d-%02d-%02dT%02d:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec);
printf "%s DEBUG - after fsync(async) at: %s. Action duration: %6.2f \n",
$time_stamp, $time_stamp_1, $time_stamp_1 - $time_stamp_0;
Я ожидал, что «асинхронное» действие не будет блокирующим действием.Так что мой процесс будет продолжаться быстро, а сброс на диск происходит в фоновом режиме.Однако процесс (или даже все процессы) заблокированы.Вот пример выходного кода выше:
2019-09-26T09:47:05 DEBUG - after fsync(async) at: 1569505625.18033. Action duration: 15.54
Есть ли способ выполнить сброс на диск при вставке большего количества записей?
Кстати: я использую Mongo 4.0.12 наОС Centos-7.