RAVENDB وقت استجابة طويل للاستعلام ، بينما تمت معالجتها على الخادم بسرعة كبيرة
سؤال
بدأ Raven.Server وملعون إلى المنفذ 8022. أقوم بتهيئة مخزن البيانات بالطريقة التالية:
var store = new DocumentStore() { Url = "http://localhost:8022" };
store.Initialize();
ثم أقوم بهذا الاستعلام:
using (var session = store.OpenSession())
{
Stopwatch watch = new Stopwatch();
watch.Start();
var result = session.LuceneQuery<Item>("Raven/DocumentsByEntityName")
.WhereEquals("Tag", "Items")
.ToList();
watch.Stop(); // watch.ElapsedMilliseconds == ~550 ms
return result;
}
و watch.ElapsedMilliseconds
هو دائما ~ 550 مللي ثانية. لكن عندما أتطلع إلى وحدة التحكم في RavendB ، أرى أن الاستعلام تمت معالجته في 3 مللي ثانية:
Request # 170: GET - 3 ms - 200 - /indexes/Raven/DocumentsByEntityName?query=Tag%253A%255B%255BItems%255D%255D&start=0&pageSize=128
وهكذا ~ 99.5 ٪ من الوقت قد قضيت في RavendB. ما المشكلة؟ (Ravendb 147)
عندما أتحول إلى استضافة الذات لـ RavendB (أي كعميل مضمن) ، كل شيء على ما يرام (~ 3 مللي ثانية).
لتوضيح هذه المشكلة ليس في الشبكة ، تصحيحات HTTP ، خوادم DNS ، إلخ. لقد اختبرت هذا أيضًا:
Stopwatch watch = new Stopwatch();
watch.Start();
WebClient client = new WebClient();
var result = client.DownloadString("http://127.0.0.1:8022/indexes/Raven/DocumentsByEntityName?query=Tag%253A%255B%255BItems%255D%255D&start=0&pageSize=128");
watch.Stop(); // watch.ElapsedMilliseconds == ~3-10ms
سريع. ولكن التحول إلى raven.client.lightweight زيادة وقت الاستجابة في 200 مرة (550-600 مللي ثانية)
المحلول
كانت المشكلة بسبب الوسيط على جهاز الكمبيوتر الخاص بي - NOD32. إذا كنت تستخدمه أيضًا - قم بإلغاء تحديد خانة الاختيار التالية:
الإعداد -> الإعداد المتقدم -> مضاد للفيروسات ومضاد للبروتوكول -> تصفية البروتوكول -> "تمكين تصفية المحتوى البروتوكالي للتطبيق"
تعطيل بسيط لمضادات الفيروسات أو جدار الحماية لا مساعدة!
نصائح أخرى
ربما nitpicking وربما مجرد typ-o ولكن في بعض الأحيان يمكن أن تدفعنا الأشياء الأكثر سخونة.
بيانك: "لقد بدأ Raven.Server ومرتفع إلى الميناء 8082. أقوم بتهيئة مخزن البيانات بالطريقة التالية: "
يقرأ مثال الرمز الخاص بك: "var store = new documentStore () {url =" http: // localhost:8022" };"
المنفذ في عنوانك هو 8082 والمنفذ في مثالك هو 8022.
أدرك أن Typ-O قد لا يكون في الكود الفعلي الخاص بك ولكن لا يؤلمني أبدًا.
'm jus' sayin '
ص