هل يجب تعطيل سجل استعلامات Mysql؟ ما هي "سجلات الخادم"، وكيفية عرض سجلات الخادم. ما هو سجل الاستعلام البطيء في MySQL؟

يعد ملف تعريف استعلام MySQL تقنية مفيدة لتحليل الأداء العام للتطبيقات المستندة إلى قاعدة البيانات. عند تطوير تطبيقات متوسطة إلى كبيرة الحجم، عادةً ما يكون هناك مئات من الاستعلامات المنتشرة عبر قاعدة تعليمات برمجية كبيرة، وتعالج قاعدة البيانات العديد من الاستعلامات في الثانية. بدون ملفات تعريف الاستعلام، يصبح من الصعب جدًا تحديد الموقع وأسباب حدوثه الاختناقاتالتطبيقات. يصف هذا البرنامج التعليمي بعض تقنيات إنشاء ملفات تعريف الاستعلام المفيدة باستخدام أدوات MySQL المدمجة.

سجل استعلام MySQL البطيء

سجل الاستعلام البطيء لـ MySQL (أو سجل الاستعلام البطيء) هو سجل ترسل فيه MySQL استعلامات بطيئة وربما تسبب مشكلات.

تأتي هذه الميزة مع MySQL ولكنها معطلة افتراضيًا. تحدد MySQL الاستعلامات التي يجب تضمينها في هذا السجل باستخدام متغيرات خاصة تسمح لك بتشكيل الاستعلام بناءً على متطلبات أداء التطبيق. عادةً، يتم إدخال الاستعلامات التي تستغرق وقتًا أطول للمعالجة والاستعلامات التي تحتوي على فهارس غير صحيحة في هذا السجل.

متغيرات التنميط

متغيرات الخادم الأساسية لتكوين سجل الاستعلام البطيء MySQL هي:

Slow_query_log عالمي
Slow_query_log_file العمومي
long_query_time العالمية/الجلسة
log_queries_not_using_indexes العالمية
min_examined_row_limit global/session

Slow_query_log – متغير منطقي لتمكين أو تعطيل سجل الاستعلام البطيء.

Slow_query_log_file - المسار المطلق لملف سجل الاستعلام. يجب أن يكون دليل الملف مملوكًا لمستخدم mysqld وأن يكون لديه أذونات القراءة والكتابة المناسبة. من المرجح أن يبدأ البرنامج الخفي mysql كـ mysql، ولكن للتأكد، قم بتشغيل الأمر في محطة Linux:

ملاحظة -ef | grep بن/mysqld | قطع -د"" -f1

سيُظهر الإخراج المستخدم الحالي ومستخدم mysqld.

مؤتمر نزع السلاح / فار / سجل
مكدير MySQL
شمود 755 ماي
تشاون MySQL:mysql mysql

  • long_query_time - الوقت بالثواني للتحقق من طول الاستعلام. إذا كانت القيمة 5، فسيتم تسجيل جميع الطلبات التي تستغرق أكثر من 5 ثوانٍ للمعالجة.
  • log_queries_not_using_indexes - قيمة منطقية تحدد ما إذا كان يجب تسجيل الاستعلامات التي لا تستخدم الفهارس. عند التحليل، مثل هذه الاستعلامات مهمة.
  • min_examined_row_limit – يحدد الحد الأدنى لعدد الصفوف التي سيتم تحليلها. بقيمة 1000، سيتم تجاهل كافة الاستعلامات التي تحلل أقل من 1000 صف.

يمكن تعيين متغيرات خادم MySQL في ملف تكوين MySQL أو باستخدامها ديناميكيًا واجهة المستخدمأو سطر أوامر MySQL. إذا تم تعيين المتغيرات في ملف التكوين، فسوف تستمر عند إعادة تشغيل الخادم، ولكن يجب إعادة تشغيل الخادم لتنشيطها. عادةً ما يوجد ملف تكوين MySQL في /etc/my.cnf أو /etc/mysql/my.cnf. للعثور على ملف التكوين، أدخل (قد تحتاج إلى توسيع بحثك إلى أدلة جذر أخرى):

ابحث عن /etc -name my.cnf
ابحث عن /usr -name my.cnf

بمجرد العثور على ملف التكوين، قم بإضافة المتغيرات المطلوبة إلى القسم:


….
سجل الاستعلام البطيء = 1
ملف سجل الاستعلام البطيء = /var/log/mysql/localhost-slow.log
وقت الاستعلام الطويل = 1
استعلامات السجل التي لا تستخدم الفهارس

لكي تدخل التغييرات حيز التنفيذ، يجب عليك إعادة تشغيل الخادم. إذا كانت هناك حاجة لتفعيل التغييرات على الفور، فقم بتعيين المتغيرات ديناميكيًا:

mysql> SET GLOBAL Slow_query_log = "ON";
mysql> SET GLOBAL Slow_query_log_file = "/var/log/mysql/localhost-slow.log";
mysql> تعيين السجل الشامل log_queries_not_using_indexes = "ON";
mysql> تعيين الجلسة long_query_time = 1;
mysql> تعيين الجلسة min_examined_row_limit = 100;

للتحقق من القيم المتغيرة:

Mysql> عرض المتغيرات العامة مثل "slow_query_log"؛
Mysql> إظهار متغيرات الجلسة مثل "long_query_time"؛

أحد عيوب التغيير الديناميكي لمتغيرات MySQL هو فقدان المتغيرات عند إعادة تشغيل الخادم. ولذلك، يجب إضافة كافة المتغيرات الهامة التي تحتاج إلى حفظ إلى الملف.

إنشاء استعلام التشكيل الجانبي

أنت الآن على دراية بإعدادات سجل الاستعلام البطيء. حاول إنشاء بيانات استعلام للتوصيف.

ملحوظة: تم تشغيل المثال الوارد هنا على مثيل MySQL قيد التشغيل دون تكوين أي سجلات استعلام بطيئة. يمكن تشغيل استعلامات الاختبار هذه عبر واجهة المستخدم الرسوميةأو سطر الأوامرماي إس كيو إل.

عند مراقبة سجل الطلبات البطيئة، من المفيد فتح نافذتين طرفيتين: اتصال واحد للإرسال بيانات MySQLوالثاني لعرض سجل الطلبات.

قم بتسجيل الدخول إلى خادم MySQL باستخدام وحدة التحكم كمستخدم يتمتع بامتيازات SUPER ADMIN. للبدء، قم بإنشاء قاعدة بيانات وجدول اختباريين، وأضف بيانات وهمية إليهما، وقم بتمكين التسجيل البطيء للاستعلام.

ملحوظة: من الناحية المثالية، من الأفضل تشغيل هذا المثال في بيئة لا تحتوي على أي تطبيقات أخرى تستخدم MySQL لتجنب ازدحام سجل الاستعلام.

$> الخلية -u -p
الخلية> إنشاء قاعدة بيانات Profile_sampling؛

mysql> استخدم Profile_sampling؛


mysql> إنشاء مستخدمي الجدول (معرف TINYINT PRIMARY KEY AUTO_INCREMENT، الاسم VARCHAR(255));


mysql> أدخل قيم المستخدمين (الاسم) ("والتر")،("سكايلر")،("جيسي")،("هانك")،("والتر جونيور.")،("ماري")،("شاول" "),("غوستافو"),("هيكتور"),("مايك");


mysql> SET GLOBAL Slow_query_log = 1;


mysql> SET GLOBAL Slow_query_log_file = "/var/log/mysql/localhost-slow.log";


mysql> تعيين log_queries_not_using_indexes = 1;


mysql> SET long_query_time = 10;


mysql> SET min_examined_row_limit = 0;

الآن لديك قاعدة بيانات اختبارية وجدول يحتوي على بعض البيانات. تم تمكين سجل الاستعلام البطيء. لقد قمنا عمدًا بتعيين وقت معالجة الطلب على مستوى مرتفع وقمنا بتعطيل التحقق من عدد الصفوف. لعرض السجل، أدخل:

cd /var/log/mysql
ليرة سورية -ل

في الوقت الحالي، لا ينبغي أن يكون هناك سجل للطلبات البطيئة في المجلد، منذ ذلك الحين هذه اللحظةلم تكن هناك طلبات. إذا كان هذا السجل موجودًا بالفعل، فهذا يعني أن قاعدة البيانات واجهت بالفعل استعلامات بطيئة منذ قيامك بتمكين الدعم لسجل الاستعلامات البطيء. وهذا قد يحرف نتائج هذا المثال. ارجع إلى علامة التبويب MySQL وقم بتشغيل:

mysql> استخدم Profile_sampling؛
Mysql> SELECT * من المستخدمين حيث المعرف = 1؛

يقوم الاستعلام الذي يتم تنفيذه ببساطة باسترداد البيانات ويستخدم فهرس المفتاح الأول من الجدول. كان هذا الاستعلام سريعًا ويستخدم فهرسًا، لذا لم يتم تسجيله في سجل الاستعلام البطيء. ارجع إلى الدليل وتأكد من عدم إنشاء أي سجل استعلام. عد الآن إلى نافذة MySQL وقم بتشغيل:

الخلية>

لا يستخدم هذا الاستعلام فهرسًا. الآن يجب أن يظهر شيء مثل هذا في السجل /var/log/mysql/localhost-slow.log:

#الزمن: 140322 13:54:58

استخدام Profile_sampling؛
تعيين الطابع الزمني = 1395521698؛

مثال آخر. قم بزيادة الحد الأدنى لعدد الصفوف للتحليل وإرسال طلب مثل هذا:

mysql> SET min_examined_row_limit = 100;
mysql> SELECT * من المستخدمين حيث الاسم = "والتر"؛

لن تتم إضافة البيانات إلى السجل لأنه تم تحليل أقل من 100 صف أثناء الطلب.

ملحوظة: إذا لم تتم إضافة البيانات إلى السجل، فأنت بحاجة إلى التحقق من عدة عوامل. تحقق أولاً من أذونات الدليل الذي تم إنشاء السجل فيه. يجب أن يكون مملوكًا لمستخدم/مجموعة mysqld وأن يتمتع بامتيازات chmod 755. يجب عليك بعد ذلك التحقق لمعرفة ما إذا كانت هناك إعدادات استعلام بطيئة أخرى على الخادم تتجاوز إعداداتك. قم بإعادة تعيين الإعدادات الافتراضية لإزالة كافة متغيرات الطلب البطيء من ملف التكوين وإعادة تشغيل الخادم. يمكنك أيضًا تعيين المتغيرات العامة ديناميكيًا على قيمها الافتراضية. إذا كنت تقوم بإجراء تغييرات ديناميكيًا، فقم بتسجيل الخروج ثم قم بتسجيل الدخول مرة أخرى إلى MySQL لتحديث الإعدادات.

تحليل بيانات ملفات تعريف الاستعلام

خذ بعين الاعتبار البيانات التالية:

#الزمن: 140322 13:54:58
# المستخدم @ المضيف: root@localhost
# وقت_الاستعلام: 0.000303 وقت القفل: 0.000090 الصفوف_المرسلة: 1 الصفوف_المفحوصة: 10
استخدام Profile_sampling؛
تعيين الطابع الزمني = 1395521698؛
حدد * من المستخدمين حيث الاسم = "جيسي"؛

يعرض هذا الإدخال:

  • وقت تنفيذ الاستعلام
  • من ارسلها
  • كم من الوقت استغرقت معالجة الطلب؟
  • طول
  • كم عدد الصفوف التي تم إرجاعها
  • كم عدد الصفوف التي تم تحليلها

وهذا مفيد لأن أي طلب ينتهك متطلبات الأداء المحددة في المتغيرات ينتهي به الأمر في السجل. يتيح ذلك للمطور أو المسؤول إمكانية تعقب الطلبات التي لا تعمل بسرعة. بالإضافة إلى ذلك، يمكن أن تساعدك بيانات ملفات تعريف الاستعلام في تحديد الظروف التي تتسبب في ضعف أداء التطبيق الخاص بك.

باستخدام mysqldumpslow

يمكن تضمين ملفات التعريف في التطبيقات المستندة إلى قاعدة البيانات لضمان تدفق معتدل للبيانات.

مع نمو حجم السجل، يصبح من الصعب تحليل جميع البيانات، ويمكن بسهولة أن تضيع الاستعلامات الإشكالية فيه. يقدم MySQL أداة تسمى mysqldumpslow، والتي تساعد على تجنب هذه المشكلة عن طريق تقسيم سجل الاستعلامات البطيئة. يرتبط الملف الثنائي بـ MySQL (على Linux)، لذا يمكنك ببساطة تشغيل الأمر:

mysqldumpslow -t 5 -s في /var/log/mysql/localhost-slow.log

يمكن للأمر قبول معلمات مختلفة لتخصيص مخرجاته. سيعرض المثال أعلاه أفضل 5 طلبات مرتبة حسب متوسط ​​وقت الطلب. هذه السلاسل أكثر قابلية للقراءة ويتم تجميعها أيضًا حسب الطلب.

العدد: 2 الوقت = 68.34 ثانية (136 ثانية) القفل = 0.00 ثانية (0 ثانية) الصفوف = 39892974.5 (79785949)، root@localhost
حدد PL.pl_title، P.page_title
من الصفحة ص
الانضمام الداخلي روابط الصفحات PL
ON PL.pl_namespace = P.page_namespace
حيث P.page_namespace = N

يظهر الإخراج البيانات التالية:

  • العد: عدد مرات تسجيل الطلب.
  • الوقت: متوسط ​​وإجمالي وقت الطلب (بين قوسين).
  • القفل: وقت قفل الطاولة.
  • الصفوف: عدد الصفوف التي تم إرجاعها.

يستبعد الأمر القيم الرقمية وقيم السلسلة، لذا يتم التعامل مع الاستعلامات المتطابقة ذات شروط WHERE المختلفة على أنها نفسها. تلغي أداة mysqldumpslow الحاجة إلى مراجعة سجل الاستعلامات البطيئة باستمرار، وتسمح لك بدلاً من ذلك بإجراء عمليات منتظمة الشيكات التلقائية. تتيح لك خيارات الأمر mysqldumpslow تشغيل التعبيرات المعقدة.

تفصيل الطلب

هناك أداة أخرى للتوصيف يجب وضعها في الاعتبار وهي أداة تحليل الاستعلامات المعقدة. يسمح لك بتحديد الاستعلامات التي بها مشكلات في سجل الاستعلام البطيء وتشغيلها في MySQL. تحتاج أولاً إلى تمكين التوصيف ثم تشغيل الاستعلام:

Mysql> تعيين ملف تعريف الجلسة = 1;
mysql> استخدم Profile_sampling؛
mysql> SELECT * من المستخدمين حيث الاسم = "جيسي"؛
الخلية> عرض الملفات الشخصية؛

بمجرد تمكين إنشاء ملفات التعريف، سيُظهر SHOW PROFILES جدولاً يربط Query_ID بتعبير SQL. ابحث عن Query_ID المطابق للاستعلام قيد التشغيل وقم بتشغيل الاستعلام التالي (استبدل # بمعرف_Query_ID الخاص بك):

Mysql> SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=#;

سيعيد الأمر جدولاً:

تسلسل ولاية مدة
1 ابتداء 0.000046
2 التحقق من الأذونات 0.000005
3 فتح الجداول 0.000036

STATE هي خطوة في عملية تنفيذ الاستعلام، وDURATION هي الوقت المستغرق لإكمال هذه الخطوة بالثواني. انها ليست جدا اداة مفيدة، ولكن يمكن أن يساعد في تحديد أي جزء من تنفيذ الاستعلام يسبب أكبر قدر من زمن الاستجابة.

ملحوظةملحوظة: لا ينبغي استخدام هذه الأداة في بيئة الإنتاج.

أداء سجل الاستعلام بطيء

كل ما تبقى هو معرفة كيفية تأثير سجل الاستعلام البطيء على الأداء. بشكل عام، من الآمن تشغيل سجلات الاستعلام البطيئة في بيئة الإنتاج؛ لا ينبغي أن تتأثر وحدة المعالجة المركزية أو الإدخال/الإخراج. ومع ذلك، يجب أن يكون لديك إستراتيجية لمراقبة حجم السجل للتأكد من أن السجل لا يصبح كبيرًا جدًا بالنسبة لنظام الملفات. بالإضافة إلى ذلك، عند تشغيل سجل استعلام بطيء في بيئة إنتاج، يجب عليك تعيين long_query_time على 1 أو أعلى.

خاتمة

يمكن أن يساعدك سجل الاستعلام البطيء في تحديد الاستعلامات التي بها مشكلات وتقييم الأداء العام للاستعلام. وفي الوقت نفسه، يمكن للمطور الحصول على فهم تفصيلي لكيفية أداء التطبيق استعلامات MySQL. تتيح لك أداة mysqldumpslow إدارة سجلات الاستعلام البطيئة ودمجها بسهولة في عملية التطوير الخاصة بك. ومن خلال تحديد الاستعلامات التي بها مشكلات، يمكنك تحسين معالجة الاستعلام لتحسين الأداء.

العلامات:

تعد سجلات الأحداث أول وأبسط أداة لتحديد حالة النظام وتحديد الأخطاء. هناك أربعة سجلات رئيسية في MySQL:

  • سجل الأخطاء- سجل الأخطاء القياسي الذي يتم جمعه أثناء تشغيل الخادم (بما في ذلك البداية والتوقف)؛
  • السجل الثنائي- سجل بجميع أوامر تعديل قاعدة البيانات اللازمة للنسخ المتماثل والنسخ الاحتياطي؛
  • سجل الاستعلام العام- سجل الاستعلام الرئيسي؛
  • سجل الاستعلام البطيء- سجل الطلبات البطيئة.

سجل الأخطاء

يحتوي هذا السجل على كافة الأخطاء التي حدثت أثناء تشغيل الخادم، بما في ذلك الأخطاء الجسيمة، بالإضافة إلى إيقاف تشغيل الخادم، وبدء تشغيل الخادم، والتحذيرات. هذا هو المكان الذي يجب أن تبدأ فيه في حالة فشل النظام. افتراضيًا، يتم إخراج جميع الأخطاء إلى وحدة التحكم (stderr)، ويمكنك أيضًا تسجيل الأخطاء في سجل النظام (الافتراضي في دبيان) أو في ملف سجل منفصل:

Log_error=/var/log/mysql/mysql_error.log

# سيتم كتابة الأخطاء في mysql_error.log

نوصي بإبقاء هذا السجل ممكّنًا لتحديد الأخطاء بسرعة. ولفهم ما يعنيه هذا الخطأ أو ذاك، فإن MySQL لديها أداة الخطأ:

Shell> خطأ 13 64 رمز خطأ نظام التشغيل 13: تم رفض الإذن رمز خطأ نظام التشغيل 64: الجهاز ليس على الشبكة

# يشرح معنى رموز الخطأ

سجل ثنائي (ويعرف أيضًا باسم ثنائي).

يتم تسجيل جميع أوامر تعديل قاعدة البيانات في السجل الثنائي، وهو أمر مفيد للنسخ المتماثل والاسترداد.

يتم تشغيله على النحو التالي:

Log_bin = /var/log/mysql/mysql-bin.logنتهي_logs_days = 5 max_binlog_size = 500 ميجا

# يشير إلى الموقع والعمر و أكبر مقاسملف

يرجى ملاحظة أنه إذا كنت لا تنوي توسيع نطاق النظام وتنفيذ التسامح مع الخطأ، فمن الأفضل عدم تمكين السجل الثنائي. فهو كثيف الموارد ويقلل من أداء النظام.

سجل الطلب

يحتوي هذا السجل على كافة استعلامات SQL المستلمة والمعلومات حول اتصالات العميل. يمكن أن يكون مفيدًا لتحليل الفهرس وتحسينه، بالإضافة إلى تحديد الاستعلامات الخاطئة:

General_log_file = /var/log/mysql/mysql.log السجل العام = 1

# يتضمن السجل ويشير إلى موقع الملف

يمكنك أيضًا تمكينه/تعطيله أثناء تشغيل خادم MySQL:

تعيين GLOBAL General_log = "ON"؛ SET GLOBAL General_log = "OFF";

# لا تحتاج إلى إعادة تشغيل الخادم لاستخدامه

سجل الطلبات البطيء

يعد السجل مفيدًا في تحديد الاستعلامات البطيئة وغير الفعالة. اقرأ المزيد في هذا المقال.

عرض السجلات

لعرض السجلات على Debian (Ubuntu)، يلزمك تشغيل:

# ذيل سجل الأخطاء -f /var/log/syslog # ذيل سجل الاستعلام -f /var/log/mysql/mysql.log # تسجيل الطلبات البطيئةالذيل -f /var/log/mysql/mysql-slow.log

# إذا لم يتم تحديد السجلات بشكل منفصل، فهي موجودة في /var/lib/mysql

تناوب السجل

لا تنس ضغط (أرشفة، تدوير) ملفات السجل بحيث تشغل مساحة أقل على الخادم. للقيام بذلك، استخدم الأداة المساعدة com.logrotateعن طريق تحرير ملف التكوين /etc/logrotate.d/mysql-server:

# - وضعت كل شيء في كتلة واحدة وأضفت نصوصًا مشتركة، بحيث يحصل mysql على # من سجلات التدفق مرة واحدة فقط. # وإلا فإن السجلات الثنائية ستزداد تلقائيًا بمقدار n مرة كل يوم. # - سجل الأخطاء قديم، وتنتقل الرسائل إلى سجل النظام الآن./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log(تدوير يومي 7 مفقود، موافق، إنشاء 640 mysql، adm، ضغط، Sharescripts، اختبار ما بعد التدوير -x /usr/bin/mysqladmin || خروج 0 # إذا فشل هذا، فتحقق من debian.conf! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" if [ -z "`$MYADMIN ping 2>/dev/null`" ]; ثم # حقا لا يوجد mysqld أو بالأحرى مستخدم صيانة debian-sys مفقود؟ # إذا حدث هذا ولم يكن خطأً، فيرجى الإبلاغ عن خطأ. #إذا ملاحظة كاكس | grep -q mysqld; ثمإذا killall -q -s0 -umysql mysqld; ثم قم بالخروج من 1 fi else $MYADMIN Flush-logs fi endscript )

# يضغط ويحفظ السجلات الضرورية وينظف الملفات

سجل دي دي إل

يحتفظ MySQL أيضًا بسجل لغة البيانات. فهو يجمع البيانات من عمليات مثل DROP_TABLE وALTER_TABLE. يتم استخدام السجل للتعافي من حالات الفشل التي حدثت أثناء مثل هذه العمليات. سجل DDL هو ملف ثنائي وليس مخصصًا ليقرأه المستخدم، لذا لا تقم بتعديله أو حذفه.

الأكثر أهمية

قم دائمًا بتشغيل سجل الأخطاء، واستخدم سجل الاستعلام للتحقق من اتصال التطبيق بقاعدة البيانات، والتحقق من الاستعلامات والتشغيل. يعد سجل الاستعلامات البطيئة مفيدًا لتحسين أداء MySQL.

مفهوم

سجلات الخادم (ملفات السجل، سجل الخادم)- الملفات المخزنة على الخادم والتي تحتوي على معلومات النظام الخاصة بالخادم، بالإضافة إلى تسجيل جميع البيانات الممكنة عن زائر مورد الويب.

يتم استخدام السجلات من قبل مسؤولي النظام لتحليل الزوارودراسة أنماط سلوك مجموعات معينة من المستخدمين، بالإضافة إلى الحصول على معلومات متنوعة عنهم، مثل: المتصفح المستخدم، وعنوان IP، وبيانات الموقع الجغرافي للعميل وغير ذلك الكثير. بالإضافة إلى التحليل، بهذه الطريقة يمكنك معرفة الوصول غير المصرح به إلى الموقع، ومعرفة من قام بذلك بدقة أكبر، ونقل البيانات حول هذه الحالة إلى السلطات المختصة.

لن تكون البيانات الموجودة في ملف السجل، في شكلها النقي، مفهومة للمستخدمين العاديين، الذين سيرون في كل هذا مجرد مجموعة من الأحرف بترتيب غير مفهوم. ولكن ل مسؤولي النظامومطوري الويب، هذا نص سهل القراءة ومعلومات مفيدة جدًا.


تسلسل أحداث

في كل مرة يصل فيها العميل إلى مورد ويب، يتم تشغيل العديد من الأحداث في وقت واحد، وسنتحدث عن تسلسلها.

1. تقديم طلب الصفحة.عند إدخال عنوان في سطر المتصفح، أو عند اتباع رابط ويب نشط، على سبيل المثال، من صفحة نتائج محرك البحث، يبحث المتصفح ويتصل بالخادم الذي توجد عليه الصفحة ويقدم طلبًا لذلك. وفي الوقت نفسه، ينقل المعلومات التالية إلى الخادم:
- عنوان IP لجهاز الكمبيوتر العميل الذي يطلب الصفحة (في حالة استخدام خادم وكيل، عنوان IP الخاص بالوكيل الخاص بك)؛
- عنوان صفحة الإنترنت التي طلبها المستخدم (عنوان IP)؛
- الوقت والتاريخ المحددان لتقديم الطلب؛
- بيانات حول الموقع الفعلي للعميل (إذا تم استخدام خادم وكيل، ثم عنوان الوكيل الفعلي)؛
- معلومات حول المتصفح الذي يستخدمه العميل (الاسم، الإصدار، وما إلى ذلك)؛
- بيانات حول صفحة الويب التي انتقل منها العميل.

2. نقل البيانات المطلوبة.يتم نقل البيانات المطلوبة (صفحة الويب والملفات وملفات تعريف الارتباط وما إلى ذلك) من الخادم إلى جهاز الكمبيوتر الخاص بالمستخدم.

3. الكتابة إلى سجل الخادم.بعد كل شيء، يحدث إدخال سجل يشير إلى جميع البيانات التي ظهرت في الحدثين الماضيين. هذه هي كافة المعلومات المرسلة في الفقرة الأولى، بالإضافة إلى معلومات حول البيانات المرسلة.

كيفية عرض سجلات الخادم

يتم تخزين ملفات السجل في ملف Access.logبغض النظر عن نوع خادم الويب الذي تستخدمه (Apache، Nginx، Squid proxy، وما إلى ذلك) هذا الملفيكون وثيقة نصية، في كل سطر مكتوب نداء واحد. تنسيقات التسجيل في Access.logكثيرًا، ولكن الأكثر شيوعًا يتم دمجه، حيث يكون الإدخال بالشكل والتسلسل التاليين:

الرمز: %h %l %u %t \"%r\" %>s %b \"%(Referer)i\" \"%(User-Agent)i\"
أين:

- عنوان المضيف/IP الذي تم تقديم الطلب منه؛
%t- وقت الطلب إلى الخادم والمنطقة الزمنية للخادم؛
%r- الإصدار والمحتوى ونوع الطلب؛
٪س- رمز حالة HTTP؛
٪ب- عدد البايتات التي يرسلها الخادم؛
%(المرجع)- مصدر URL للطلب؛
٪(وكيل المستخدم)- رأس HTTP، مع معلومات حول الطلب (تطبيق العميل، واللغة، وما إلى ذلك)؛
٪(يستضيف)- اسم المضيف الظاهري الذي يتم الوصول إليه.

عند الانتهاء، يبدو هذا السطر كما يلي:

127.0.0.1 - - "الحصول على /index.php HTTP/1..0 (متوافق؛ MSIE 7.0؛ Windows NT 5.1)"

ستستغرق قراءة السجلات يدويًا الكثير من الوقت والجهد. ولذلك، يستخدم مشرفو المواقع ذوو الخبرة برنامجًا خاصًا يسمى "محللات ملفات السجل". يقومون بتحليل جميع البيانات، التي يصعب على البشر قراءتها، وإنتاج بيانات منظمة. هذه برامج مثل: تناظري، WebAnalizer، Webalizer، Awstats، Webtrends، إلخ.أنواع خاصة برمجةالكثير جدا، من بينها هناك مثل البرامج المدفوعة، ومجاني. لذلك، أنا متأكد من أن الجميع سيجدون ما يرضيهم.

أين يمكن العثور على سجلات الموقع

إذا كان لديك استضافة منتظمة، فمن المرجح أن تضطر إلى الكتابة إلى مضيفك وطلب السجلات منه. وأيضًا، في كثير من الأحيان، يمكنك طلبها من خلال لوحة الاستضافة. يقوم المضيفون المختلفون بذلك بشكل مختلف. على سبيل المثال، لطلب من المستضيف الخاص بي، فقط اضغط على الصفحة الرئيسيةلوحات:


إذا كان لديك حق الوصول إلى مجلدات النظامالخادم، ثم يمكنك العثور على السجلات في /etc/httpd/logs/access_logفي 99 حالة من أصل 100.

سجل الأخطاء error.log

سجل الخطأ- ملف يتم فيه الاحتفاظ بالسجلات أيضًا. ولكن ليس الزوار، ولكن الأخطاء التي حدثت على الخادم. كما هو الحال مع Access.log، كل سطر من الملف مسؤول عن خطأ واحد حدث. يتم التسجيل مع الأخذ في الاعتبار معلومات مثل: التاريخ والوقت الدقيقين لحدوث الخطأ، وعنوان IP الذي تم إصدار الخطأ إليه، ونوع الخطأ، بالإضافة إلى سبب حدوثه.

خاتمة

تعد السجلات أداة قوية وغنية بالمعلومات للعمل معها. ولكن في الوقت الحاضر، تم استبدالها بأدوات مثل Yandex.Metrica وGoogle Analytics وما إلى ذلك، مما يجعل حياتنا أسهل. ومع ذلك، إذا كنت تخطط للتطوير والنمو وتعلم شيء جديد، فأنا بالتأكيد أوصي بالتعرف على هذا الموضوع بشكل أفضل.

استعلامات التنميط في Mysqlتستخدم لتقييم أداء التطبيق الخاص بك. عند تطوير تطبيقات متوسطة إلى كبيرة الحجم، يتعين عليك التعامل مع مئات الطلبات الموزعة عبر التعليمات البرمجية الخاصة بك والتي يتم تنفيذها كل ثانية. بدون تقنيات إنشاء ملفات تعريف الاستعلام، قد يكون من الصعب جدًا اكتشاف السبب الذي يتسبب في تدهور أداء التطبيق الخاص بك.

ما هو سجل الاستعلام البطيء في MySQL؟

سجل استعلام MySQL البطيء - سجل يشير إلى الاستعلامات البطيئة والتي قد تكون مسببة للمشاكل. يدعم MySQL هذه الوظيفة بشكل افتراضي، ولكنها معطلة. من خلال تعيين متغيرات معينة للخادم، يمكننا تحديد الطلبات التي نهتم بها. في أغلب الأحيان، نحتاج إلى استعلامات تتطلب قدرًا معينًا من الوقت لإكمالها أو استعلامات لا تعالج الفهارس بشكل صحيح.

تحديد متغيرات ملف التعريف

المتغيرات الرئيسية لإعداد سجل الاستعلام:

Slow_query_log G Slow_query_log_file G long_query_time G / S log_queries_not_using_indexes G min_examined_row_limit G / S

تعليق: G - المتغيرات العالمية، S - متغيرات النظام

  • Slow_query_log - قيمة منطقية بما في ذلك السجل
  • Slow_query_log_file - المسار المطلق لملف السجل. يجب أن يكون مالك الدليل مستخدمًا mysqldويجب أن يتمتع الدليل بأذونات القراءة والكتابة الصحيحة. في أغلب الأحيان يتم تشغيل البرنامج الخفي mysql كمستخدم mysql.

للتحقق، قم بتشغيل الأوامر التالية:

ملاحظة-إف | grep بن/mysqld | قطع -د"" -f1

سيعطيك إخراج الأمر اسم المستخدم الحالي ومستخدم mysqld. مثال لإعداد الدليل /var/log/mysql:

Cd /var/log sudo mkdir mysql sudo chmod 755 mysql sudo chown mysql:mysql mysql

  • long_query_time - الوقت بالثواني للتحقق من مدة الاستعلام. على سبيل المثال، بقيمة 5، سيتم تسجيل كل طلب يستمر لأكثر من 5 ثوانٍ.
  • log_queries_not_using_indexes - قيمة منطقية، تتيح حفظ الاستعلامات التي لا تستخدم الفهارس. مثل هذه الاستعلامات مهمة جدًا في التحليل.
  • min_examined_row_limit - يحدد الحد الأدنى لقيمة عدد صفوف البيانات التي سيتم تحليلها. ستتجاهل القيمة 1000 الاستعلامات التي تُرجع أقل من 1000 صف من القيم.

يمكن تعيين هذه المتغيرات في ملف تكوين MySQL، بشكل ديناميكي من خلال MySQL GUI أو سطر أوامر MySQL. إذا تم تحديد المتغيرات في ملف التكوين، فسيقوم الخادم بتثبيتها في المرة التالية التي يبدأ فيها التشغيل. عادةً ما يوجد هذا الملف في /etc، /usr، /etc/my.cnf أو /etc/mysql/my.cnf. فيما يلي أوامر البحث عن ملف التكوين (في بعض الأحيان يجب عليك توسيع البحث إلى أدلة جذر أخرى):

ابحث عن /etc -name my.cnf ابحث عن /usr -name my.cnf

عند العثور على الملف، قم بإضافة المتغيرات المطلوبة في القسم:

; ... سجل الاستعلام البطيء = ملف سجل استعلام بطيء واحد = /var/log/mysql/localhost-slow.log long_query_time = 1 log-queries-not-using-indexes ؛ لا معنى اللازمة هنا

ستصبح التغييرات سارية المفعول فقط في المرة التالية التي تبدأ فيها تشغيل MySQL؛ إذا كنت بحاجة إلى تغيير المعلمات ديناميكيًا، فاستخدم طرقًا أخرى لتعيين المتغيرات:

Mysql> SET GLOBAL Slow_query_log = "ON"; mysql> SET GLOBAL Slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> تعيين السجل الشامل log_queries_not_using_indexes = "ON"; mysql> تعيين الجلسة long_query_time = 1; mysql> تعيين الجلسة min_examined_row_limit = 100;

يمكنك التحقق من قيم المتغيرات كما يلي:

Mysql> عرض المتغيرات العامة مثل "slow_query_log"؛ Mysql> إظهار متغيرات الجلسة مثل "long_query_time"؛

العيب الرئيسي للتثبيت الديناميكي هو أن القيم ستفقد عند بدء تشغيل النظام. يوصى بتحديد معلمات مهمة في تكوين MySQL.

المذكرة: بناء الجملة لإعداد المعلمات ديناميكيًا عبر تعيين الأمرويختلف استخدام ملف التكوين قليلًا، على سبيل المثال Slow_query_log / Slow-query-log . ستجد وصفًا كاملاً لبناء الجملة في وثائق نظام إدارة قواعد البيانات الرسمية. يتم استخدام تنسيق ملف الاختيار لملف التكوين، اسم متغير النظام - أسماء المتغيرات عند تعيين القيم ديناميكيًا.

إنشاء بيانات لملف تعريف الاستعلام

لقد قمنا بمراجعة النقاط الرئيسية لإعداد ملفات التعريف، والآن سنقوم بإنشاء الاستعلامات التي تهمنا. تم استخدام هذا المثال على الجري خادم ماي إس كيو إلدون أي إعدادات سجل أولية. يمكن إطلاق نماذج الاستعلامات من خلال أدوات أوامر MySQL GUI وDBMS. عند مراقبة سجل الاستعلامات البطيئة، من الشائع فتح نافذتين متصلتين: واحدة لتشغيل الاستعلامات والأخرى لعرض السجل.

$> mysql -u -p mysql> إنشاء قاعدة بيانات Profile_sampling; mysql> استخدم Profile_sampling؛ mysql> إنشاء مستخدمي الجدول (معرف TINYINT PRIMARY KEY AUTO_INCREMENT، الاسم VARCHAR(255)); mysql> أدخل قيم المستخدمين (الاسم) ("والتر")،("سكايلر")،("جيسي")،("هانك")،("والتر جونيور.")،("ماري")،("شاول" "),("غوستافو"),("هيكتور"),("مايك"); mysql> SET GLOBAL Slow_query_log = 1; mysql> SET GLOBAL Slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> تعيين log_queries_not_using_indexes = 1; mysql> SET long_query_time = 10; mysql> SET min_examined_row_limit = 0;

الآن لدينا قاعدة بيانات تحتوي على بيانات الاختبار. لقد أطلقنا ملف التعريف، ولكننا تعمدنا أن يكون وقت الاستجابة وعدد الأسطر صغيرًا. لعرض السجل استخدم الأمر:

Cd /var/log/mysql ls -l

من الناحية النظرية، يجب ألا يكون ملف السجل موجودًا بعد، لأننا لم نقم بإجراء استعلامات إلى قاعدة البيانات. إذا كان موجودًا، فهذا يعني أنه تم تكوين ملف التعريف مسبقًا، وقد يؤدي ذلك إلى تشويه نتائج المثال. تشغيل في وحدة التحكم:

Mysql> استخدم Profile_sampling؛ Mysql> SELECT * من المستخدمين حيث المعرف = 1؛

يستخدم استعلامنا فهرس المفتاح الأساسي من الجدول. تتم معالجة الطلب بسرعة كبيرة باستخدام الفهرس، لذلك لا ينبغي أن ينعكس في السجل. يرجى ملاحظة أنه لا ينبغي إنشاء ملف السجل.

الآن قم بما يلي:

Mysql> SELECT * من المستخدمين حيث الاسم = "جيسي"؛

هنا لم نستخدم الفهارس. يجب أن نرى الآن هذا الطلب في السجل:

Sudo cat /var/log/mysql/localhost-slow.log # الوقت: 140322 13:54:58 # User@Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 Rows_sent: 1 Rows_examined: 10 use Profile_sampling; تعيين الطابع الزمني = 1395521698؛ حدد * من المستخدمين حيث الاسم = "جيسي"؛

دعونا ننظر إلى مثال آخر. ارفع الشريط على عدد الأسطر في الاستجابة وقم بتشغيل الاستعلام التالي:

Mysql> SET min_examined_row_limit = 100; mysql> SELECT * من المستخدمين حيث الاسم = "والتر"؛

لن يظهر الطلب في السجل، حيث أننا لم نتجاوز 100 سطر في الرد على الطلب.

المذكرة: إذا لم يتم عرض البيانات في السجل، فيجب عليك أولاً مراعاة العوامل التالية. الأول هو حقوق الدليل حيث يتم تخزين ملف السجل. يجب أن تتوافق المجموعة والمستخدم مع مستخدم mysqld، ويجب أن تكون الحقوق chmod 755. ثانيًا، ربما تم تكوين ملفات التعريف مسبقًا. قم بإزالة أي قيم لمتغيرات ملفات التعريف الموجودة من ملف التكوين وأعد تشغيل الخادم أو قم بتعيين المتغيرات ديناميكيًا. إذا استخدمت الطريقة الديناميكية، فسوف تخرج وتسجل الدخول مرة أخرى إلى وحدة تحكم MySQL.

تحليل بيانات ملفات تعريف الاستعلام

خذ بعين الاعتبار المثال أعلاه:

# الوقت: 140322 13:54:58 # User@Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 Rows_sent: 1 Rows_examined: 10 use Profile_sampling; تعيين الطابع الزمني = 1395521698؛ حدد * من المستخدمين حيث الاسم = "جيسي"؛

وهنا نرى:

  • الوقت الذي بدأ فيه الطلب
  • المستخدم الذي قدم الطلب
  • طلبات ساعات العمل
  • مدة القفل
  • عدد الصفوف المحددة
  • عدد الأسطر التي تم تحليلها

هذه البيانات مفيدة للغاية، حيث يمكننا بمساعدتها العثور على سبب تباطؤ النظام والقضاء عليه. أيضًا، سيتمكن مطور أو مسؤول MySQL دائمًا من رؤية الاستعلامات الإشكالية وأود أن أشير إلى أن العثور عليها هنا أسرع بكثير من دراسة كود التطبيق. من خلال التنميط طويل الأمد، يمكنك مراقبة ظروف التشغيل بسرعة منخفضة.

باستخدام mysqldumpslow

يسجل السجل البيانات باستمرار، كقاعدة عامة، يكتب أكثر بكثير مما يقرأ منه. في حجم كبيرسجل، وقراءته يصبح مشكلة. يتضمن MySQL أداة تسمى mysqldumpslow والتي تساعد في الحفاظ على سلامة السجل. يتم دمج البرنامج نفسه مع MySQL (on أنظمة لينكس). لاستخدامه، اتبع الأمر اللازموتمريره المسار إلى ملف السجل:

Sudo mysqldumpslow -t 5 -s في /var/log/mysql/localhost-slow.log

هناك عدد من المعلمات التي تساعدك على تخصيص إخراج الأمر. في المثال أدناه، سنرى الطلبات الخمسة الأخيرة مرتبة حسب متوسط ​​المدة. ونتيجة لذلك، تصبح قراءة السجل أكثر ملاءمة. (تم تعديل الإخراج لإظهار قيم السجل الفعلية):

العدد: 2 الوقت = 68.34 ثانية (136 ثانية) القفل = 0.00 ثانية (0 ثانية) الصفوف = 39892974.5 (79785949)، root@localhost SELECT PL.pl_title، P.page_title من الصفحة P INNER JOIN pagelinks PL ON PL.pl_namespace = P.page_namespace حيث P.page_namespace = N ...

ما نراه:

  • العد - عدد مرات ظهور الطلب في السجل
  • الوقت - متوسط ​​وإجمالي وقت الطلب
  • القفل - وقت قفل الطاولة
  • الصفوف - عدد الصفوف المحددة

يستثني الأمر بيانات الاستعلام الرقمية والسلسلة، مما يعني أن الاستعلامات التي لها نفس جملة WHERE سيتم اعتبارها هي نفسها. بفضل هذه الأداة، لن تضطر إلى النظر باستمرار إلى السجل. نظرًا للعدد الكبير من معلمات الأوامر، يمكنك فرز الإخراج كما يحلو لك. هناك أيضًا تطورات تابعة لجهات خارجية ذات وظائف مماثلة، على سبيل المثال pt-query-digest.

تفصيل الطلب

يجب عليك الانتباه إلى أداة أخرى تسمح لك بتحليل الاستعلامات المعقدة. في أغلب الأحيان يتعين عليك أخذ استعلام من السجل ثم تشغيله مباشرة في وحدة تحكم MySQL. تحتاج أولاً إلى تمكين التوصيف ثم تشغيل الاستعلام:

Mysql> تعيين ملف تعريف الجلسة = 1؛ mysql> استخدم Profile_sampling؛ mysql> SELECT * من المستخدمين حيث الاسم = "جيسي"؛ الخلية> عرض الملفات الشخصية؛

بعد تمكين التوصيف، سيعرض SHOW PROFILES جدولًا يربط بين Query_ID وتعبير SQL. ابحث عن Query_ID المقابل وقم بتشغيل الاستعلام التالي (استبدل # بمعرف_Query_ID الخاص بك):

Mysql> SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=#;

مثال الإخراج:

مدة حالة التسلسل 1 تبدأ من 0.000046 2 فحص الأذونات 0.000005 3 فتح الجداول 0.000036

ولاية- خطوة في عملية تنفيذ الطلب، مدة- مدة الخطوة بالثواني. لا يتم استخدام هذه الأداة في كثير من الأحيان، ولكن في بعض الأحيان قد تكون مفيدة للغاية في تحديد سبب بطء أداء الاستعلام.

وصف تفصيلي للأعمدة:

وصف تفصيلي للخطوات:

المذكرة: لا ينبغي استخدام هذه الأداة في وضع إنتاج الخادم، باستثناء تحليل استعلامات محددة.

أداء سجل الاستعلام بطيء

السؤال الأخير هو كيف يؤثر التنميط على أداء الخادم ككل. في وضع الإنتاج الخاص بالخادم، يمكنك استخدام هذا التسجيل بأمان تام، ولا ينبغي أن يؤثر على وحدة المعالجة المركزية أو الإدخال/الإخراج. ومع ذلك، يجدر الانتباه إلى حجم ملف السجل، فلا ينبغي أن يصبح كبيرًا بشكل يمنعه. أود أيضًا أن أشير من خلال التجربة إلى أنه تم تعيين قيمة المتغير long_query_time على ثانية واحدة أو أعلى.

مهم: يجب عدم استخدام أداة التوصيف - SET profiling = 1 - لتسجيل كافة الطلبات، أي. لا يوصى باستخدام المتغير General_log في وضع المنتج وتحت الأحمال الثقيلة.

خاتمة

يمكن أن يساعدك تحديد ملفات تعريف الاستعلام كثيرًا في عزل الاستعلام الذي به مشكلات وتقييم الأداء العام. يمكن للمطور أيضًا دراسة كيفية عمل استعلامات MySQL لتطبيقه. تساعدك أداة mysqldumpslow على عرض ومعالجة سجلات الاستعلام. بعد تحديد الاستعلامات الإشكالية، كل ما تبقى هو ضبطها لتحقيق أقصى قدر من الأداء.




قمة