簡體   English   中英

PHP遠程MySQL數據庫連接非常慢

[英]PHP remote MySQL database connection is very SLOW

我在新加坡和印度的不同地理位置上有2台服務器。

我需要從服務器2的php腳本連接服務器1。腳本看起來像這樣:

<?php 

echo microtime(true)."\n";
$con = mysql_pconnect('server1','username','password');

$db = mysql_select_db('database_name',$con);                      

echo microtime(true)."\n";

$q = "select * from tablename where id='35'";
$result = mysql_query($q);

echo microtime(true)."\n";

?>

該腳本的輸出如下所示:

1373977322.9081
1373977324.377
1373977324.6625

如您所見,第二和第三之間的時間大約是2秒,這意味着mysql_pconnect花費了更多的2秒。 第三和第四(選擇查詢)之間的時間非常短。

另外,如果我在server1上運行此腳本並將其連接到server1本身,則需要20毫秒。

無法弄清楚為什么連接時間太長。 我還嘗試了一些操作,例如“ 跳過名稱解析”和持久連接。 但是:(

我該如何調試這個東西???

從計時中可以看到,打開連接需要1.4689秒,而查詢需要0.2855秒。 如果一次性DNS查找是唯一的問題,那么查詢的速度將大大提高:300毫秒是很長的時間。 這意味着問題必須在其他地方。

首次打開連接時,客戶端和服務器會進行協商,在協商中,一個問另一個問題,然后等待答復很多次。 如果網絡具有高延遲,則每個問答周期將花費不小的時間,這將加起來。 您可以使用ping來衡量兩台計算機之間的網絡延遲。

這就是為什么您看不到本地連接幾乎沒有延遲(低延遲)的原因,並且為什么在建立連接后查詢就會快速運行(沒有協商)。 沒有真正的解決辦法,只是確保一旦獲得連接就可以充分利用它,除非絕對必要,否則避免建立新的連接。

首先,嘗試使用PDO像這樣的php代碼做同樣的事情:

echo microtime(true)."\n";
$con = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');    
echo microtime(true)."\n";    
$q = $con->query("select * from tablename where id='35'");    
echo microtime(true)."\n";

如果執行時間仍然相同,則必須執行緩存系統以減少與數據庫的連接數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM