2009-06-04 31 views
8

Tôi đang làm việc để tối ưu hóa trang web của mình và tôi đã có các truy vấn chậm MySQL đăng nhập trong vài ngày, nhưng sau khi truy cập> 260 triệu truy vấn, nó chỉ ghi lại 6 truy vấn chậm và những truy vấn đặc biệt do tôi thực hiện phpMyAdmin. Tôi tự hỏi nếu có một cái gì đó để đăng nhập chậm PHP thời gian thực hiện trang để tôi có thể tìm thấy một số trang đang hogging tài nguyên, hơn là các truy vấn cụ thể.PHP tương đương với nhật ký truy vấn chậm của MySQL?

+0

Có thể là các truy vấn phpMyAdmin là ưu tiên thấp, điều đó sẽ làm cho chúng hiển thị như 'chậm' – karim79

+0

Tôi chỉ nhắc đến đó để nói không có truy vấn nào cần được tối ưu hóa trên trang web. –

+2

Nếu bạn muốn có các phép đo chính xác hơn so với câu trả lời được chấp nhận, để tìm vị trí trong tài liệu, nút cổ chai của bạn là - bạn có thể kiểm tra Điểm chuẩn từ PEAR. Nó cho phép bạn thiết lập các điểm đánh dấu trong mã của bạn để tìm các cổ chai. –

Trả lời

10

Đầu tiên, có xdebug, trong đó có một profiler, nhưng tôi sẽ không sử dụng nó trên một máy sản xuất, vì nó tiêm mã và mang lại tốc độ thu thập thông tin. Rất tốt cho môi trường thử nghiệm, mặc dù.

Nếu bạn muốn đo tốc độ trên môi trường sản xuất, tôi sẽ chỉ đo bằng tay. microtime() là chức năng cho những thứ này trong PHP. Giả sử bạn có một header.php và footer.php mà được gọi bằng tất cả các kịch bản php:

# In your header.php (or tpl) 
$GLOBALS['_execution_start'] = microtime(true); 

# In your footer.php (or tpl) 
file_put_contents(
    '/tmp/my_profiling_results.txt', 
    microtime(true) - $GLOBALS['_execution_start'] . ':' . print_r($_SERVER, true) . "\n", 
    FILE_APPEND 
); 
+0

Cảm ơn, đề xuất thứ hai của bạn là một ý tưởng hay. Tôi đã hy vọng sẽ có một số cách để tự động hóa điều này, nhưng điều này hoạt động tốt như không có nhiều nỗ lực. –

+0

Ồ, một điều để thêm vào điều này. FILE_APPEND phải được thêm làm cờ, vì vậy bạn không chỉ nhận được quyền truy cập gần đây nhất trong nhật ký. –

+0

Thx, tôi luôn quên điều đó :) – soulmerge

4

Bạn có thể quấn kịch bản của bạn trong một bộ đếm thời gian đơn giản, như thế này:

/*in your header or at the top of the page*/ 
$time_start = microtime(true); 

/* your script goes here */ 

/*in your footer, or at the bottom of the page*/ 
$time_end = microtime(true); 
$time = $time_end - $time_start; 
echo "It took $time seconds\n"; 

Lưu ý rằng sẽ thêm hai hành chức năng và một chút nhỏ bé của toán như chi phí.

1

thể bạn không đăng ký một chức năng tắt máy mà các cuộc gọi dấu chấm hết cho bộ đếm thời gian? http://us3.php.net/register_shutdown_function Bằng cách đó, bạn chỉ cần khởi động bộ hẹn giờ ở bất cứ nơi nào bạn nghĩ có thể có vấn đề.

5

gì về auto_prepend_file và auto_append_file, chỉ viết một bài về nó http://blog.xrado.si/post/php-slow-log

+0

đây có phải là bài viết đúng không? http://blog.xrado.si/post/php-slow-log –

+0

có, tôi có tên miền mới – xrado

1

Nếu bạn đang sử dụng FastCGI để thực hiện kịch bản PHP của bạn, bạn có thể sử dụng Process FastCGI Manager (FPM, php-fpm) mà cũng hỗ trợ một được gọi là "làm chậm".

Bạn có thể bật tính năng này trong cấu hình php của php-fpm (cho debian này là /etc/php5/fpm/pool.d/www.conf) với tùy chọn cấu hình: request_slowlog_timeout và slowlog.

request_slowlog_timeout

Thời gian chờ phục vụ một yêu cầu duy nhất sau đó một vết lùi PHP sẽ được đổ vào các tập tin 'slowlog'. Giá trị '0' có nghĩa là 'Tắt'. Các đơn vị có sẵn: s (econds) (mặc định), m (inutes), h (của chúng tôi), hoặc d (ays). Giá trị mặc định: 0.

làm chậm lại

Tệp nhật ký cho yêu cầu chậm. Giá trị mặc định: # INSTALL_PREFIX #/log/php-fpm.log.slow.

từ http://php.net/manual/en/install.fpm.configuration.php

Xem thêm: http://php.net/manual/en/install.fpm.phphttp://rtcamp.com/tutorials/php/fpm-slow-log/

Các vấn đề liên quan