【问题标题】:Exact Network time from php application Server to mysql database server从 php 应用程序服务器到 mysql 数据库服务器的确切网络时间
【发布时间】:2016-09-26 12:21:48
【问题描述】:

我有两台服务器 一台是运行 PHP 应用程序的应用服务器,另一台是运行 Mysql 数据库的服务器。我想测量从应用程序服务器发送请求到在数据库服务器上接收到执行任何查询的请求所花费的时间。

注意:请求刚刚发送到数据库服务器时的时间戳,以及在执行任何查询以响应请求之前在数据库服务器上接收到的请求的时间戳。对在两台服务器之间传输数据所需的时间感兴趣。我知道这取决于数据的大小。我只是想获得不同大小的数据的时间。

如果有任何工具可以进行这种测量或任何方法仅针对此特定请求进行测量。(已经知道请求发送时间戳只需要知道如何捕获请求接收时间戳)

任何人都可以建议从一台机器上的 php 服务器到另一台机器上的 mysql db 服务器的方法。 并在数据库或文件或任何有用的工具上记录该时间。 到目前为止,我正在做的是从 php 服务器上传任何文件并在执行 mysql 查询之前记录时间,并在收到执行查询的请求时尝试在数据库级别获取时间戳,但问题是现在()花费了我没有的时间't think is the time when datsbase is first hit.

代码是这样写的

<?php
include('db_config.php');
if (isset($_FILES['data'])) {

    if (!file_exists('files/')) {
        mkdir('files/', 0777, true);
    }
    if (!file_exists('img/')) {
        mkdir('img/', 0777, true);
    }
    $errors = array();
    $file_name = $_FILES['data']['name'];
    $file_size = $_FILES['data']['size'];
    $file_tmp = $_FILES['data']['tmp_name'];
    $file_type = $_FILES['data']['type'];
    if (move_uploaded_file($file_tmp, "img/" . $file_name)) {
        $l = 1;

        $t = microtime(true);
        $micro = sprintf("%03d", ($t - floor($t)) * 1000);
        $d = new DateTime(date('Y-m-d H:i:s.' . $micro, $t));
        $dd = 'Receiving Time : ' . $d->format("Y-m-d H:i:s.u");
        $fileSize = 'File Size : ' . $file_size;
        $res = 'Sending Time : ' . $_REQUEST['hidd'] . ' ' . $dd . ' ' . $fileSize;


        $directory = 'files/';

        if (glob($directory . "*.txt") != false) {
            $filecount = count(glob($directory . "*.txt"));
            $filecount ++;
            $file = "files/record_" . $filecount . ".txt";
            $fd = fopen($file, "a");
            if (!$fd) {
                die("Could not open $file to write in");
            }
            fwrite($fd, $res);
        } else {
            $file = "files/record_" . $l . ".txt";
            $fd = fopen($file, "a");
            if (!$fd) {
                die("Could not open $file to write in");
            }
            fwrite($fd, $res);
        }

        fclose($fd);
    }

    $db = new Database();
    $db->connect();

    echo $send_time = date("Y-m-d H:i:s");
    $db->insert('request_record', array("$file_name", "$file_size", $send_time, "$res"), "file_name,
        file_size,
        request_generated_time,       
        file_uploaded
        ");
    $res = $db->getResult();
    print_r($res);
    echo $end_time = date("Y-m-d H:i:s"); } ?>
<html>
    <body>

        <form action="" method="POST" enctype="multipart/form-data" id="frm1">
            <input type="file" name="data" />
            <input type="hidden" name="hidd" id="hd" />
            <input type="button" value="Submit" onclick="pdfSubmit()"/>
        </form>

    </body>

    <script type="text/javascript" src="./jquery-1.9.1.min.js"></script>
    <script>
                function pdfSubmit() {
                    var currentTime = new Date();
                    var hours = currentTime.getHours();
                    var minutes = currentTime.getMinutes();
                    var seconds = currentTime.getSeconds();
                    var miliseconds = currentTime.getMilliseconds();

                    if (minutes < 10) {
                        minutes = "0" + minutes;
                    }
                    if (seconds < 10) {
                        seconds = "0" + seconds;
                    }
                    var year = pad(currentTime.getFullYear());
                    var month = pad(currentTime.getMonth() + 1);
                    var day = pad(currentTime.getDate());

                    var n = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds + '.' + miliseconds;
                    $('#hd').val(n);
                    $('#frm1').submit();
                }
                function pad(numb) {
                    return (numb < 10 ? '0' : '') + numb;
                }
    </script>
</html>

【问题讨论】:

    标签: php mysql postgresql server communication


    【解决方案1】:

    PHP 是同步的,所以这很容易。使用应该立即返回的非常简单的东西。

    使用microtime(true) 返回时间戳浮点数(之前和之后)。

    然后这取决于你使用什么 SQL API,但运行类似 SELECT 1 的东西。

    然后比较时间戳。

    【讨论】:

    • 请建议如何在数据库服务器上收到存储请求@devon
    【解决方案2】:

    我会在发送查询之前和之后使用应用程序服务器上的 time() 函数。将差值除以二,你应该得到平均时间。

    【讨论】:

    • 如果我将提交 100 次的更大文件,那么发送请求将花费更多时间,而从数据库到应用程序的响应时间则更少。以上解决方案将不起作用@philip
    • @vinitdhull 如果您谈论的是您的问题应该反映的特定情况。因为这是您的问题太宽泛,研究工作很少
    • 好吧,这不是很清楚。您也可以使用以下方法从数据库服务器获取时间戳:SELECT extract(epoch FROM now());
    • 具体写着“注意:请求刚刚发送到数据库服务器时的时间戳,以及在执行查询之前在数据库服务器上接收到的请求。感兴趣的是在两个服务器之间传输数据所需的时间。”
    猜你喜欢
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2011-02-19
    • 2017-09-13
    • 2020-06-02
    相关资源
    最近更新 更多