آیا لاگ جستجوهای Mysql باید غیرفعال باشد؟ گزارش‌های سرور چیست، چگونه گزارش‌های سرور را مشاهده کنیم. ورود پرس و جو کند در MySQL چیست؟

پروفایل پرس و جو MySQL یک تکنیک مفید برای تجزیه و تحلیل عملکرد کلی برنامه های کاربردی مبتنی بر پایگاه داده است. هنگام توسعه برنامه‌های کاربردی متوسط ​​تا بزرگ، معمولاً صدها درخواست در یک پایگاه کد بزرگ پخش می‌شوند و پایگاه داده در هر ثانیه درخواست‌های زیادی را پردازش می‌کند. بدون پروفایل پرس و جو، تعیین مکان و علل وقوع بسیار دشوار می شود تنگناهابرنامه های کاربردی. این آموزش برخی از تکنیک های مفید پروفایل پرس و جو را با استفاده از ابزارهای داخلی MySQL شرح می دهد.

گزارش آهسته پرس و جو MySQL

گزارش پرس و جوی آهسته MySQL (یا گزارش پرس و جو کند) گزارشی است که MySQL پرس و جوهای کند و بالقوه مشکل ساز را ارسال می کند.

این ویژگی با MySQL ارائه می شود اما به طور پیش فرض غیرفعال است. MySQL با استفاده از متغیرهای ویژه ای که به شما امکان می دهد پرس و جو را بر اساس الزامات عملکرد برنامه نمایه کنید، تعیین می کند که کدام پرس و جو باید در این گزارش گنجانده شود. به طور معمول، پرس و جوهایی که پردازش آنها بیشتر طول می کشد و پرس و جوهایی که نمایه های نادرست دارند در این گزارش وارد می شوند.

متغیرهای پروفایل

متغیرهای اصلی سرور برای پیکربندی گزارش جستجوی آهسته MySQL عبارتند از:

slow_query_log جهانی
slow_query_log_file جهانی
long_query_time global/session
log_queries_not_using_indexes جهانی
min_examined_row_limit global/session

slow_query_log – یک متغیر بولی برای فعال یا غیرفعال کردن گزارش کند پرس و جو.

slow_query_log_file – مسیر مطلق فایل گزارش پرس و جو. فهرست فایل باید متعلق به کاربر mysqld باشد و دارای مجوزهای خواندن و نوشتن مناسب باشد. دیمون mysql به احتمال زیاد به عنوان mysql راه اندازی می شود، اما برای اطمینان، دستور را در ترمینال لینوکس اجرا کنید:

ps -ef | grep bin/mysqld | برش -d" " -f1

خروجی کاربر فعلی و کاربر mysqld را نشان می دهد.

سی دی /var/log
mkdir mysql
chmod 755 mysql
chown 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 را پیدا کنید

پس از یافتن فایل پیکربندی، متغیرهای مورد نیاز را به بخش اضافه کنید:


….
slow-query-log = 1
slow-query-log-file = /var/log/mysql/localhost-slow.log
long_query_time = 1
log-queries-not-using-indexes

برای اعمال تغییرات، باید سرور را مجددا راه اندازی کنید. اگر تغییرات نیاز است فوراً فعال شوند، متغیرها را به صورت پویا تنظیم کنید:

mysql> SET GLOBAL slow_query_log = "روشن";
mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log";
mysql> SET GLOBAL log_queries_not_using_indexes = "روشن";
mysql> SET SESSION long_query_time = 1;
mysql> SET SESSION min_examined_row_limit = 100;

برای بررسی مقادیر متغیر:

mysql> نشان دادن متغیرهای جهانی مانند "slow_query_log"؛
mysql> نمایش متغیرهای جلسه مانند "long_query_time";

یکی از معایب تغییر پویای متغیرهای MySQL این است که با راه اندازی مجدد سرور، متغیرها از بین می روند. بنابراین، تمام متغیرهای مهمی که باید ذخیره شوند باید به فایل اضافه شوند.

ایجاد یک پرسش پروفایل

اکنون با تنظیمات ثبت درخواست کند آشنا شدید. سعی کنید داده های پرس و جو را برای پروفایل ایجاد کنید.

توجه داشته باشید: مثال ارائه شده در اینجا بر روی یک نمونه MySQL در حال اجرا بدون پیکربندی لاگ جستجوی کند اجرا شد. این پرس و جوهای آزمایشی را می توان از طریق اجرا کرد رابط کاربری گرافیکییا خط فرمان MySQL.

هنگام نظارت بر گزارش درخواست های کند، باز کردن دو پنجره ترمینال مفید است: یک اتصال برای ارسال عبارات MySQLو دومی برای مشاهده گزارش درخواست است.

با استفاده از کنسول به عنوان کاربر با امتیازات SUPER ADMIN وارد سرور MySQL شوید. برای شروع، یک پایگاه داده و جدول آزمایشی ایجاد کنید، داده های ساختگی را به آن اضافه کنید و ثبت درخواست کند را فعال کنید.

توجه داشته باشید: در حالت ایده‌آل، این مثال بهتر است در محیطی اجرا شود که هیچ برنامه دیگری از MySQL استفاده نمی‌کند تا از بهم ریختگی گزارش پرس و جو جلوگیری شود.

$> mysql -u -p
mysql> ایجاد پایگاه داده profile_sampling;

mysql> از profile_sampling استفاده کنید.


mysql> CREATE TABLE کاربران (ID TINYINT PRIMARY KEY AUTO_INCREMENT، نام VARCHAR(255));


mysql> INSERT INTO users (نام) VALUES ("Walter")، ("Skyler")، ("Jesse")، ("Hank")، ("Walter Jr.")، ("Marie") ("Saul") ")، ("گوستاوو")، ("هکتور")، ("مایک")؛


mysql> SET GLOBAL slow_query_log = 1;


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


mysql> SET GLOBAL log_queries_not_using_indexes = 1;


mysql> SET long_query_time = 10;


mysql> SET min_examined_row_limit = 0;

اکنون یک پایگاه داده آزمایشی و یک جدول با مقداری داده دارید. گزارش کند درخواست فعال است. ما عمداً زمان پردازش درخواست را روی بالا تنظیم کردیم و بررسی تعداد ردیف را غیرفعال کردیم. برای مشاهده گزارش وارد کنید:

سی دی /var/log/mysql
ls -l

در حال حاضر، نباید گزارشی از درخواست های کند در پوشه وجود داشته باشد، زیرا این لحظههیچ درخواستی وجود نداشت اگر چنین گزارشی از قبل وجود داشته باشد، به این معنی است که پایگاه داده قبلاً با پرس و جوهای کند مواجه شده است، زیرا پشتیبانی از گزارش جستجوی کند را فعال کرده اید. این ممکن است نتایج این مثال را منحرف کند. به تب MySQL برگردید و اجرا کنید:

mysql> از profile_sampling استفاده کنید.
mysql> SELECT * از کاربران WHERE id = 1;

کوئری اجرا شده به سادگی داده ها را بازیابی می کند و از شاخص اولین کلید از جدول استفاده می کند. این پرس و جو سریع بود و از یک شاخص استفاده می کرد، بنابراین در گزارش جستجوی کند ثبت نمی شود. به دایرکتوری برگردید و مطمئن شوید که هیچ گزارش پرس و جو ایجاد نشده است. حالا به پنجره MySQL برگردید و اجرا کنید:

mysql>

این پرس و جو از شاخص استفاده نمی کند. اکنون چیزی شبیه به این باید در log /var/log/mysql/localhost-slow.log ظاهر شود:

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

از profile_sampling استفاده کنید.
SET timestamp=1395521698;

یک مثال دیگر حداقل تعداد سطرها را برای تجزیه افزایش دهید و درخواستی مانند این ارسال کنید:

mysql> SET min_examined_row_limit = 100;
mysql> SELECT * FROM users WHERE name = "Walter";

داده ها به گزارش اضافه نمی شوند زیرا کمتر از 100 ردیف در طول درخواست تجزیه و تحلیل شده است.

توجه داشته باشید: اگر داده ها به گزارش اضافه نشده اند، باید چندین فاکتور را بررسی کنید. ابتدا مجوزهای دایرکتوری که لاگ در آن ایجاد شده است را بررسی کنید. باید متعلق به کاربر/گروه mysqld باشد و دارای امتیازات chmod 755 باشد. برای حذف همه متغیرهای درخواست کند از فایل پیکربندی و راه اندازی مجدد سرور، تنظیمات پیش فرض را بازنشانی کنید. همچنین می توانید متغیرهای سراسری را به صورت پویا روی مقادیر پیش فرض خود تنظیم کنید. اگر تغییرات را به صورت پویا انجام می دهید، از سیستم خارج شوید و دوباره وارد MySQL شوید تا تنظیمات را به روز کنید.

تجزیه و تحلیل داده های پروفایل پرس و جو

داده های زیر را در نظر بگیرید:

# زمان: 140322 13:54:58
#User@Host: root@localhost
# زمان_پرسش: 0.000303 زمان_قفل: 0.000090 سطر_ارسال شده: 1 ردیف_بررسی: 10
از profile_sampling استفاده کنید.
SET timestamp=1395521698;
SELECT * FROM users WHERE name = "Jesse";

این ورودی نمایش می دهد:

  • زمان اجرای پرس و جو
  • کی فرستاده
  • رسیدگی به درخواست چقدر طول کشید؟
  • طول
  • چند ردیف برگردانده شد
  • چند ردیف تجزیه شد

این مفید است زیرا هر درخواستی که الزامات عملکرد مشخص شده در متغیرها را نقض کند به گزارش ختم می شود. این به یک برنامه‌نویس یا مدیر اجازه می‌دهد تا درخواست‌هایی را که کار نمی‌کنند به سرعت ردیابی کند. علاوه بر این، داده‌های پروفایل پرس و جو می‌توانند به شما کمک کنند تا تعیین کنید چه شرایطی باعث عملکرد ضعیف برنامه شما می‌شود.

استفاده از mysqldumpslow

نمایه سازی را می توان در برنامه های کاربردی مبتنی بر پایگاه داده برای اطمینان از جریان متوسط ​​داده گنجاند.

با افزایش اندازه گزارش، تجزیه همه داده ها دشوار می شود و پرس و جوهای مشکل ساز می توانند به راحتی در آن گم شوند. MySQL ابزاری به نام mysqldumpslow را ارائه می دهد که با تقسیم کردن گزارش جستجوهای کند به جلوگیری از این مشکل کمک می کند. باینری به MySQL (در لینوکس) پیوند داده شده است، بنابراین می توانید به سادگی دستور زیر را اجرا کنید:

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 را انتخاب کنید
از صفحه P
پیوندهای صفحه داخلی JOIN PL
در PL.pl_namespace = P.page_namespace
WHERE P.page_namespace = N

خروجی داده های زیر را نشان می دهد:

  • تعداد: چند بار درخواست ثبت شده است.
  • زمان: میانگین و کل زمان درخواست (در پرانتز).
  • قفل: زمان قفل میز.
  • ردیف ها: تعداد ردیف های برگشتی.

این دستور مقادیر عددی و رشته ای را مستثنی می کند، بنابراین پرس و جوهای یکسان با شرایط WHERE متفاوت به عنوان یکسان در نظر گرفته می شوند. ابزار mysqldumpslow نیاز به بررسی مداوم گزارش جستجوهای کند را از بین می برد، در عوض به شما امکان می دهد به طور منظم انجام دهید. چک های خودکار. گزینه های دستور mysqldumpslow به شما امکان اجرای عبارات پیچیده را می دهد.

درخواست شکست

یکی دیگر از ابزارهای نمایه سازی که باید در نظر داشت، ابزار Complex Query Breakdown Tool است. این امکان را به شما می دهد تا پرس و جوهای مشکل ساز را در گزارش پرس و جوی کند شناسایی کنید و آن را در MySQL اجرا کنید. ابتدا باید نمایه سازی را فعال کنید و سپس کوئری را اجرا کنید:

mysql> SET SESSION پروفایل = 1;
mysql> از profile_sampling استفاده کنید.
mysql> SELECT * FROM users WHERE name = "Jesse";
mysql> نمایش پروفایل ها.

هنگامی که نمایه سازی فعال شد، SHOW PROFILES جدولی را نشان می دهد که Query_ID را با عبارت SQL مرتبط می کند. Query_ID مربوط به کوئری در حال اجرا را پیدا کنید و کوئری زیر را اجرا کنید (# Query_ID خود را جایگزین کنید):

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

دستور جدولی را برمی گرداند:

SEQ حالت مدت زمان
1 راه افتادن 0.000046
2 بررسی مجوزها 0.000005
3 میزهای باز کردن 0.000036

STATE مرحله ای در فرآیند اجرای پرس و جو است و DURATION زمانی است که برای تکمیل آن مرحله در چند ثانیه طول می کشد. خیلی نیست ابزار مفید، اما می تواند به تعیین اینکه کدام قسمت از اجرای کوئری بیشترین تأخیر را ایجاد می کند کمک کند.

توجه داشته باشیدتوجه: این ابزار نباید در محیط تولید استفاده شود.

عملکرد کند گزارش پرس و جو

تنها چیزی که باقی می ماند این است که بفهمیم چگونه گزارش کند پرس و جو بر عملکرد تأثیر می گذارد. به طور کلی، اجرای لاگ های پرس و جو کند در یک محیط تولید ایمن است. نه CPU و نه I/O نباید تحت تأثیر قرار گیرند. با این حال، شما باید یک استراتژی برای نظارت بر اندازه گزارش داشته باشید تا مطمئن شوید که گزارش برای سیستم فایل خیلی بزرگ نمی شود. به‌علاوه، هنگام اجرای یک ثبت درخواست کند در یک محیط تولید، باید long_query_time را روی ۱ یا بالاتر تنظیم کنید.

نتیجه

یک گزارش پرس و جو کند می تواند به شما در شناسایی پرس و جوهای مشکل ساز و ارزیابی عملکرد کلی پرس و جو کمک کند. در همان زمان، توسعه‌دهنده می‌تواند درک دقیقی از نحوه عملکرد برنامه داشته باشد پرس و جوهای MySQL. ابزار mysqldumpslow به شما این امکان را می‌دهد تا لاگ‌های پرس و جو کند را مدیریت کنید و به راحتی آنها را در فرآیند توسعه خود بگنجانید. با شناسایی پرس و جوهای مشکل ساز، می توانید پردازش پرس و جو را برای بهبود عملکرد بهینه کنید.

برچسب ها:

گزارش رویدادها اولین و ساده ترین ابزار برای تعیین وضعیت سیستم و شناسایی خطاها هستند. چهار لاگ اصلی در MySQL وجود دارد:

  • گزارش خطا- گزارش خطای استاندارد که در حین اجرای سرور جمع آوری می شود (از جمله شروع و توقف).
  • Log باینری- گزارشی از تمام دستورات تغییر پایگاه داده، مورد نیاز برای تکرار و پشتیبان گیری؛
  • گزارش پرس و جو عمومی- گزارش پرس و جو اصلی؛
  • ثبت پرس و جو کند- گزارش درخواست های کند.

گزارش خطا

این گزارش شامل تمام خطاهایی است که در حین کار سرور رخ داده است، از جمله خطاهای مهم، و همچنین خاموش شدن سرور، راه اندازی سرور و هشدارها. در صورت خرابی سیستم باید از اینجا شروع کنید. به طور پیش فرض، همه خطاها به کنسول (stderr) خروجی می شوند، همچنین می توانید خطاها را در syslog (پیش فرض در دبیان) یا یک فایل گزارش جداگانه ثبت کنید:

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

# خطاها در mysql_error.log نوشته می شود

توصیه می کنیم برای شناسایی سریع خطاها، این گزارش را فعال نگه دارید. و برای درک اینکه این یا آن خطا به چه معناست، MySQL دارای ابزار خطا است:

Shell> error 13 64 OS کد خطا 13: مجوز رد شد کد خطای سیستم عامل 64: ماشین در شبکه نیست

# معنی کدهای خطا را توضیح می دهد

ورود به سیستم باینری (با نام مستعار باینری).

تمام دستورات اصلاح پایگاه داده در لاگ باینری ثبت می شوند که برای تکرار و بازیابی مفید است.

اینجوری روشن میشه:

Log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 5 max_binlog_size = 500M

# مکان، طول عمر و حداکثر اندازهفایل

لطفاً توجه داشته باشید که اگر قصد ندارید سیستم را مقیاس بندی کنید و تحمل خطا را پیاده سازی کنید، بهتر است گزارش باینری را فعال نکنید. این منبع فشرده است و عملکرد سیستم را کاهش می دهد.

ثبت درخواست

این گزارش شامل تمام پرس و جوهای دریافتی SQL و اطلاعات مربوط به اتصالات مشتری است. می تواند برای تجزیه و تحلیل و بهینه سازی شاخص و همچنین شناسایی پرس و جوهای اشتباه مفید باشد:

General_log_file = /var/log/mysql/mysql.log general_log = 1

# شامل گزارش است و مکان فایل را نشان می دهد

شما همچنین می توانید آن را در زمانی که سرور MySQL در حال اجرا است فعال یا غیرفعال کنید:

SET GLOBAL general_log = "روشن"; SET GLOBAL general_log = "OFF";

# برای استفاده از آن نیازی به راه اندازی مجدد سرور ندارید

ثبت درخواست کند

گزارش برای شناسایی پرس و جوهای کند، یعنی ناکارآمد مفید است. در این مقاله بیشتر بخوانید.

مشاهده گزارش‌ها

برای مشاهده گزارش‌ها در دبیان (اوبونتو) باید اجرا کنید:

# Error log tail -f /var/log/syslog #Query log tail -f /var/log/mysql/mysql.log # درخواست های کند را ثبت کنید tail -f /var/log/mysql/mysql-slow.log

# اگر لاگ ها به طور جداگانه مشخص نشده باشند، در /var/lib/mysql قرار دارند

چرخش لاگ

فراموش نکنید که فایل های گزارش را فشرده (بایگانی، چرخاندن) کنید تا فضای کمتری در سرور اشغال کنند. برای انجام این کار، از ابزار کمکی استفاده کنید logrotateبا ویرایش فایل پیکربندی /etc/logrotate.d/mysql-server:

# - من همه چیز را در یک بلوک قرار دادم و اسکریپت های اشتراک گذاری شده را اضافه کردم، به طوری که mysql فقط یک بار # flush-logs"d دریافت می کند. # - گزارش خطا منسوخ شده است، پیام ها اکنون به syslog می روند./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log( چرخش روزانه 7 missingok ایجاد 640 mysql adm فشرده سازی اشتراک اسکریپت ها تست پس چرخش -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-maint وجود ندارد؟ # اگر این اتفاق می افتد و یک خطا نیست، لطفاً یک اشکال را گزارش کنید. #اگر ps cax | grep -q mysqld; سپس if killall -q -s0 -umysql mysqld; سپس از 1 فی دیگری خارج شوید $MYADMIN flush-logs fi endscript )

# گزارش های لازم را فشرده و بایگانی می کند، فایل ها را پاک می کند

ثبت DDL

MySQL همچنین یک گزارش زبان داده را حفظ می کند. داده ها را از عملیات هایی مانند DROP_TABLE و ALTER_TABLE جمع آوری می کند. گزارش برای بازیابی خرابی هایی که در طول چنین عملیاتی رخ داده است استفاده می شود. DDL Log یک فایل باینری است و برای خواندن توسط کاربر در نظر گرفته نشده است، بنابراین آن را اصلاح یا حذف نکنید.

مهم ترین

همیشه گزارش خطا را روشن کنید، از گزارش پرس و جو برای بررسی اتصال برنامه به پایگاه داده، بررسی کوئری ها و عملکرد استفاده کنید. گزارش پرس و جوهای کند برای بهینه سازی عملکرد MySQL مفید است.

مفهوم

گزارش های سرور (فایل های لاگ، گزارش سرور)- فایل های ذخیره شده در سرور که حاوی اطلاعات سیستم سرور و همچنین ثبت کلیه داده های ممکن در مورد بازدید کننده منبع وب هستند.

گزارش‌ها توسط مدیران سیستم برای تجزیه و تحلیل بازدیدکنندگان استفاده می‌شوندمطالعه الگوهای رفتاری گروه های خاصی از کاربران و همچنین به دست آوردن اطلاعات مختلف در مورد آنها، مانند: مرورگر مورد استفاده، آدرس IP، داده های مربوط به موقعیت جغرافیایی مشتری و موارد دیگر. علاوه بر تجزیه و تحلیل، از این طریق می توانید از دسترسی غیرمجاز به سایت مطلع شوید، دقیقاً متوجه شوید که دقیقاً چه کسی آن را ساخته است و اطلاعات مربوط به این مورد را به مقامات مربوطه منتقل کنید.

داده های موجود در فایل log، به شکل خالص خود، برای کاربران عادی قابل درک نخواهد بود، زیرا در همه اینها فقط مجموعه ای از کاراکترها به ترتیب نامفهومی مشاهده می شود. اما برای مدیران سیستمو توسعه دهندگان وب، این متن بسیار خواندنی و اطلاعات مفیدی است.


توالی رویدادها

هر بار که یک کلاینت به یک منبع وب دسترسی پیدا می کند، چندین رویداد به طور همزمان فعال می شوند که در مورد ترتیب آنها صحبت خواهیم کرد.

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\"
جایی که:

%h- آدرس میزبان/IP که درخواست از آن انجام شده است.
%t- زمان درخواست به سرور و منطقه زمانی سرور؛
%r- نسخه، محتوا و نوع درخواست؛
%s- کد وضعیت HTTP؛
%b- تعداد بایت های ارسال شده توسط سرور؛
% (مرجع)- منبع URL درخواست؛
٪(عامل کاربر)- هدر HTTP، با اطلاعات مربوط به درخواست (برنامه مشتری، زبان و غیره)؛
% (میزبان)- نام میزبان مجازی که در حال دسترسی است.

پس از اتمام، این خط چیزی شبیه به این است:

127.0.0.1 - - "GET /index.php HTTP/1..0 (سازگار؛ MSIE 7.0؛ Windows NT 5.1)"

خواندن لاگ به صورت دستی زمان و تلاش زیادی را می طلبد. بنابراین وب مسترهای با تجربه از نرم افزار خاصی به نام Log File Analyzers استفاده می کنند. آنها تمام داده ها را تجزیه و تحلیل می کنند که خواندن آن برای انسان بسیار دشوار است و داده های ساختاری تولید می کنند. اینها برنامه هایی مانند: آنالوگ، WebAnalizer، Webalizer، Awstats، Webtrends و غیره.انواع خاص نرم افزاربسیار زیاد، در میان آنها مانند وجود دارد برنامه های پولی، و رایگان. بنابراین، من مطمئن هستم که هر کس چیزی را به دلخواه خود پیدا خواهد کرد.

از کجا می توان لاگ های سایت را پیدا کرد

اگر هاست معمولی دارید، به احتمال زیاد باید به هاست خود بنویسید و از او لاگ درخواست کنید. همچنین، اغلب، می توانید آنها را از طریق پنل میزبانی درخواست کنید. میزبان های مختلف این کار را متفاوت انجام می دهند. به عنوان مثال، برای درخواست از میزبان من، فقط روی صفحه نخستپانل ها:


اگر دسترسی دارید پوشه های سیستمسرور، سپس شما می توانید سیاهههای مربوط را در پیدا کنید /etc/httpd/logs/access_logدر 99 مورد از 100 مورد.

ورود خطا error.log

Error.log- فایلی که لاگ ها نیز در آن نگهداری می شوند. اما نه بازدیدکنندگان، بلکه خطاهایی که روی سرور رخ داده است. همانطور که در مورد access.log، هر خط از فایل مسئول یک خطا است که رخ داده است. ضبط با در نظر گرفتن اطلاعاتی مانند: تاریخ و زمان دقیق وقوع خطا، آدرس IP که خطا برای آن صادر شده است، نوع خطا و همچنین دلیل وقوع آن انجام می شود.

نتیجه

لاگ ها ابزاری بسیار قدرتمند و آموزنده هستند که باید با آن کار کنید. اما امروزه ابزارهایی مانند Yandex.Metrica، Google Analytics و غیره جایگزین آن‌ها شده‌اند و در نتیجه زندگی ما را آسان‌تر می‌کنند. با این حال، اگر قصد توسعه، رشد و یادگیری چیزهای جدیدی را دارید، مطمئناً توصیه می کنم که با این موضوع بیشتر آشنا شوید.

نمایه سازی پرس و جوها در Mysqlبرای ارزیابی عملکرد برنامه شما استفاده می شود. هنگام توسعه برنامه های متوسط ​​تا بزرگ، باید با صدها درخواست توزیع شده در سراسر کد خود که در هر ثانیه اجرا می شوند، مقابله کنید. بدون تکنیک‌های پروفایل پرس و جو، یافتن اینکه چه چیزی باعث کاهش عملکرد برنامه شما می‌شود بسیار دشوار است.

لاگ پرس و جو کند در MySQL چیست؟

MySQL Slow Query Log - گزارشی که پرس و جوهای کند و بالقوه مشکل ساز را علامت گذاری می کند. 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 - مسیر مطلق به فایل log. مالک دایرکتوری باید کاربر باشد mysqldو دایرکتوری باید دارای مجوزهای صحیح خواندن و نوشتن باشد. اغلب شبح mysql به عنوان یک کاربر اجرا می شود mysql.

برای بررسی، دستورات زیر را اجرا کنید:

Ps-ef | grep bin/mysqld | برش -d" " -f1

خروجی دستور نام کاربر فعلی و کاربر mysqld را به شما می دهد. مثالی از راه اندازی دایرکتوری /var/log/mysql:

سی دی /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 یا خط فرمان MySQL تنظیم کرد. اگر متغیرها در فایل پیکربندی مشخص شده باشند، سرور دفعه بعد که شروع به کار کرد آنها را نصب خواهد کرد. معمولاً این فایل در /etc، /usr، /etc/my.cnf یا /etc/mysql/my.cnf قرار دارد. در اینجا دستورات جستجو برای فایل پیکربندی آمده است (گاهی اوقات باید جستجو را به سایر دایرکتوری های ریشه گسترش دهید):

/etc -name my.cnf را پیدا کنید /usr -name my.cnf را پیدا کنید

وقتی فایل را پیدا کردید، متغیرهای مورد نیاز را در بخش اضافه کنید:

; ... slow-query-log = 1 slow-query-log-file = /var/log/mysql/localhost-slow.log long_query_time = 1 log-queries-not-using-indexes ; اینجا نیازی به معنی نیست

تغییرات فقط دفعه بعد که MySQL را شروع می کنید اعمال می شود، اگر نیاز به تغییر پویا پارامترها دارید، از روش های دیگر برای تنظیم متغیرها استفاده کنید.

Mysql> SET GLOBAL slow_query_log = "روشن"; mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> SET GLOBAL log_queries_not_using_indexes = "روشن"; mysql> SET SESSION long_query_time = 1; mysql> SET SESSION min_examined_row_limit = 100;

می توانید مقادیر متغیرها را به صورت زیر بررسی کنید:

Mysql> نشان دادن متغیرهای جهانی مانند "slow_query_log"; mysql> نمایش متغیرهای جلسه مانند "long_query_time";

نقطه ضعف اصلی نصب پویا این است که مقادیر با شروع سیستم از بین می روند. توصیه می شود پارامترهای مهم را در پیکربندی MySQL مشخص کنید.

یادداشت: نحو برای تنظیم پویا پارامترها از طریق دستور SETو استفاده از فایل پیکربندی کمی متفاوت است، به عنوان مثال slow_query_log / slow-query-log . شرح کاملی از نحو را در اسناد رسمی DBMS خواهید دید. فرمت Option-File برای فایل پیکربندی، System Variable Name - نام متغیرها هنگام تنظیم مقادیر به صورت پویا استفاده می شود.

تولید داده برای پروفایل پرس و جو

ما نکات اصلی را برای تنظیم پروفایل بررسی کرده ایم، اکنون پرس و جوهایی را ایجاد می کنیم که مورد علاقه ما هستند. این مثال در اجرا استفاده شد سرور MySQLبدون هیچ گونه تنظیمات ثبت اولیه. پرس و جوهای نمونه را می توان از طریق ابزارهای دستوری MySQL GUI و DBMS راه اندازی کرد. هنگام نظارت بر گزارش جستجوهای کند، معمولاً دو پنجره با یک اتصال باز می شود: یکی برای اجرای پرس و جوها و دیگری برای مشاهده گزارش.

$> mysql -u -p mysql> ایجاد پایگاه داده profile_sampling; mysql> از profile_sampling استفاده کنید. mysql> CREATE TABLE کاربران (ID TINYINT PRIMARY KEY AUTO_INCREMENT، نام VARCHAR(255)); mysql> INSERT INTO users (نام) VALUES ("Walter")، ("Skyler")، ("Jesse")، ("Hank")، ("Walter Jr.")، ("Marie") ("Saul") ")، ("گوستاوو")، ("هکتور")، ("مایک")؛ mysql> SET GLOBAL slow_query_log = 1; mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> SET GLOBAL log_queries_not_using_indexes = 1; mysql> SET long_query_time = 10; mysql> SET min_examined_row_limit = 0;

اکنون یک پایگاه داده با داده های آزمایشی داریم. ما نمایه سازی را راه اندازی کردیم، اما عمداً زمان پاسخ و تعداد خطوط را کم تنظیم کردیم. برای مشاهده گزارش از دستور زیر استفاده کنید:

سی دی /var/log/mysql ls -l

در تئوری، فایل log هنوز نباید وجود داشته باشد، زیرا ما در پایگاه داده پرس و جو نکرده ایم. اگر وجود داشته باشد، به این معنی است که نمایه سازی زودتر پیکربندی شده است، و این ممکن است نتایج مثال را مخدوش کند. اجرا در کنسول:

Mysql> از profile_sampling استفاده کنید. mysql> SELECT * از کاربران WHERE id = 1;

درخواست ما از شاخص کلید اصلی جدول استفاده می کند. درخواست با استفاده از نمایه بسیار سریع پردازش می شود، بنابراین نباید در گزارش منعکس شود. لطفا توجه داشته باشید که فایل لاگ نباید ایجاد می شد.

حالا موارد زیر را انجام دهید:

Mysql> SELECT * FROM users WHERE name = "Jesse";

در اینجا ما از شاخص استفاده نکردیم. اکنون باید این درخواست را در گزارش مشاهده کنیم:

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_ampsling; profile_examin استفاده شده SET timestamp=1395521698; SELECT * FROM users WHERE name = "Jesse";

بیایید به مثال دیگری نگاه کنیم. نوار تعداد خطوط پاسخ را بالا ببرید و پرس و جو زیر را اجرا کنید:

Mysql> SET min_examined_row_limit = 100; mysql> SELECT * FROM users WHERE name = "Walter";

درخواست در گزارش منعکس نمی شود، زیرا ما در پاسخ به درخواست از 100 خط تجاوز نکرده ایم.

یادداشت: اگر داده ها در گزارش نمایش داده نمی شوند، قبل از هر چیز باید عوامل زیر را در نظر بگیرید. اولین مورد حقوق دایرکتوری است که فایل log در آن ذخیره می شود. گروه و کاربر باید با کاربر mysqld مطابقت داشته باشند، حقوق باید chmod 755 باشد. هر مقدار متغیر پروفایل موجود را از فایل پیکربندی حذف کنید و سرور را مجددا راه اندازی کنید یا متغیرها را به صورت پویا تنظیم کنید. اگر از روش پویا استفاده کرده اید، از کنسول MySQL خارج شده و دوباره وارد سیستم می شوید.

تجزیه و تحلیل داده های پروفایل پرس و جو

به مثال بالا توجه کنید:

# زمان: 140322 13:54:58 # User@Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 سطر_ارسال شده: 1 ردیف_بررسی شده: 10 استفاده از پروفایل_نمونه سازی; SET timestamp=1395521698; SELECT * FROM users WHERE name = "Jesse";

در اینجا می بینیم:

  • زمان شروع درخواست
  • کاربری که درخواست را داده است
  • درخواست ساعات کار
  • مدت زمان مسدود شدن
  • تعداد ردیف های انتخاب شده
  • تعداد خطوط تجزیه شده

این داده ها بسیار مفید هستند، زیرا با کمک آن می توانیم علت کند شدن سیستم را پیدا کرده و از بین ببریم. همچنین، یک توسعه دهنده یا مدیر MySQL همیشه می تواند پرس و جوهای مشکل ساز را ببیند و من می خواهم توجه داشته باشم که یافتن آنها در اینجا بسیار سریعتر از مطالعه کد برنامه است. با پروفایل طولانی مدت، می توانید شرایط عملیاتی را با سرعت کم نظارت کنید.

استفاده از mysqldumpslow

لاگ به طور مداوم داده ها را ثبت می کند، بسیار بیشتر از آنچه از آن خوانده می شود، می نویسد. در سایز بزرگورود به سیستم، خواندن آن مشکل ساز می شود. MySQL شامل ابزاری به نام mysqldumpslow است که به حفظ یکپارچگی گزارش کمک می کند. خود برنامه با MySQL (روشن سیستم های لینوکس). برای استفاده از آن فالو کنید دستور لازمو مسیر فایل log را به آن ارسال کنید:

Sudo mysqldumpslow -t 5 -s در /var/log/mysql/localhost-slow.log

تعدادی پارامتر وجود دارد که به شما کمک می کند خروجی فرمان را سفارشی کنید. در مثال زیر پنج درخواست آخر را خواهیم دید که بر اساس میانگین مدت زمان مرتب شده اند. در نتیجه، خواندن گزارش بسیار راحت تر می شود. (خروجی برای نشان دادن مقادیر واقعی گزارش اصلاح شد):

تعداد: 2 Time=68.34s (136s) Lock=0.00s (0s) Rows=39892974.5 (79785949), root@localhost SELECT PL.pl_title, P.page_title FROM page P INNER JOIN pagelinks PL_pagespacespace =Ppl.pagespacespace. WHERE P.page_namespace = N ...

آنچه می بینیم:

  • تعداد - تعداد دفعات درخواست در گزارش
  • زمان - میانگین و کل زمان درخواست
  • قفل - زمان قفل میز
  • ردیف - تعداد ردیف های انتخاب شده

این دستور داده های پرس و جوی عددی و رشته ای را حذف می کند، به این معنی که پرس و جوهایی با عبارت WHERE یکسان در نظر گرفته می شوند. به لطف این ابزار، لازم نیست دائماً گزارش را مرور کنید. با توجه به تعداد زیاد پارامترهای فرمان، می توانید خروجی را به دلخواه مرتب کنید. همچنین پیشرفت‌های شخص ثالثی با عملکرد مشابه وجود دارد، برای مثال pt-query-digest.

درخواست شکست

باید به ابزار دیگری توجه کنید که به شما امکان می دهد پرس و جوهای پیچیده را تجزیه کنید. اغلب شما باید یک پرس و جو از گزارش بگیرید و سپس آن را مستقیماً در کنسول MySQL اجرا کنید. ابتدا باید نمایه سازی را فعال کنید و سپس کوئری را اجرا کنید:

Mysql> SET SESSION پروفایل = 1; mysql> از profile_sampling استفاده کنید. mysql> SELECT * FROM users WHERE name = "Jesse"; mysql> نمایش پروفایل ها.

پس از فعال کردن پروفایل، SHOW PROFILES جدولی را نشان می دهد که Query_ID و عبارت SQL را به هم پیوند می دهد. Query_ID مربوطه را بیابید و کوئری زیر را اجرا کنید (## را با Query_ID خود جایگزین کنید):

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

خروجی نمونه:

SEQ STATE DURATION 1 شروع 0.000046 2 مجوزهای بررسی 0.000005 3 جداول باز کردن 0.000036

حالت- مرحله ای در فرآیند اجرای یک درخواست، مدت زمان- مدت زمان گام بر حسب ثانیه این ابزار اغلب استفاده نمی شود، اما گاهی اوقات می تواند در تعیین علت کندی عملکرد پرس و جو بسیار مفید باشد.

شرح مفصل ستون ها:

شرح دقیق مراحل:

یادداشت: این ابزار به جز برای تجزیه و تحلیل پرس و جوهای خاص نباید در حالت تولید سرور استفاده شود.

عملکرد کند گزارش پرس و جو

آخرین سوال این است که چگونه پروفایل بر عملکرد سرور به عنوان یک کل تأثیر می گذارد. در حالت تولید سرور، می توانید با خیال راحت از چنین ورود به سیستم استفاده کنید. با این حال، ارزش توجه به اندازه فایل ورود به سیستم را دارد. همچنین می‌خواهم به تجربه اشاره کنم که مقدار متغیر long_query_time را روی ۱ ثانیه یا بالاتر تنظیم کنید.

مهم: برای ثبت همه درخواست ها نباید از ابزار پروفایل - SET profiles = 1 - استفاده کنید. استفاده از متغیر general_log در حالت محصول و تحت بارهای سنگین توصیه نمی شود.

نتیجه

پروفایل پرس و جو می تواند در جداسازی پرس و جو مشکل ساز و ارزیابی عملکرد کلی به شما کمک زیادی کند. توسعه‌دهنده همچنین می‌تواند نحوه عملکرد جستجوهای MySQL برنامه خود را مطالعه کند. ابزار mysqldumpslow به شما کمک می کند تا لاگ های پرس و جو را مشاهده و پردازش کنید. پس از شناسایی پرس و جوهای مشکل ساز، تنها چیزی که باقی می ماند تنظیم آنها برای حداکثر کارایی است.




بالا