相关疑难解决方法(0)

持久数据库连接 - 是或否?

我正在使用PHP的PDO层进行项目中的数据访问,我一直在阅读它并发现它对持久数据库连接有很好的内在支持.我想知道何时/是否应该使用它们.我会在CRUD沉重的应用程序中看到性能优势吗?是否存在需要考虑的缺点,可能与安全性有关?

如果对你很重要,我正在使用MySQL 5.x.

persistence pdo database-connection

46
推荐指数
2
解决办法
3万
查看次数

为什么构建PDO连接速度慢?

我在我的PHP应用程序中使用PDO.它连接到同一服务器上的MySQL服务器:

$db = new PDO(mysql:host=localhost;dbname=test, $username, $password);
Run Code Online (Sandbox Code Playgroud)

我创建了两个具有相同输出的页面(只是普通html中的一些虚拟数据),其中一个包含创建PDO的调用.如果我打开不使用连接的页面,响应速度会提高0.5到1秒.

php pdo

35
推荐指数
1
解决办法
1万
查看次数

是否有必要关闭PDO连接

我注意到PDO没有关闭功能.我应该关闭连接还是不需要PDO?

php pdo

25
推荐指数
3
解决办法
3万
查看次数

完全理解PDO ATTR_PERSISTENT

题:

使用PDO时,持久连接管理背后的规则/逻辑是什么?


环境:

网络服务器

  • Windows 7 x64
  • 双核,16GB RAM
  • Apache 2.2.17
  • PHP 5.3.5
  • 通过DSN字符串连接IP地址,端口,服务名称等...
  • 没有用于DB conn的ODBC(现在尝试创建一个2小时,感谢Oracle!)

DB服务器

  • Linux上的Oracle 10g
  • 多核,4GB RAM
  • 专门为我的网络应用创建的用户名(是的,这是假的)
    • user:webuser

我的理解/观察:

非持久连接

<?php

// Open a new connection
// Session created in Oracle
$dbh = new PDO('DSN', 'webuser', 'password');

// webuser is active in v$session with a SID=1

$dbh = NULL;

// webuser removed from v$session

// Manually calling $dbh = NULL; will remove the session from v$session
// OR
// Wait for script EOL so a …
Run Code Online (Sandbox Code Playgroud)

php oracle pdo oracle10g

23
推荐指数
1
解决办法
2万
查看次数

每次都应该使用PDO :: ATTR_PERSISTENT吗?

使用PDO建立与数据库的连接时,是否应每次使用PDO属性PDO :: ATTR_PERSISTENT?它表示这会为该用户创建一个持久连接,并且每次请求数据库连接时都会获取相同的连接而不是重新建立新连接.为什么这不是默认值?有没有理由不使用它?

php pdo

20
推荐指数
2
解决办法
1万
查看次数

在单个脚本中连接多个数据库的优缺点

假设用户在单个主机上托管了两个数据库,我需要连接到它们,以便我可以随时使用任何表而无需多次添加连接代码.

我已经在CodeIgniter中实现了这一点,在database.php文件中添加了两个数据库的授权详细信息,并$this->load->database('dbname');在脚本中加载了所需的数据库.

现在,对于核心PHP,我们可以这样做:

mysql_connect ('host','user','password','port','dbname'); // connection with one database.   
Run Code Online (Sandbox Code Playgroud)

它与我的第一个数据库连接.

现在,我想连接第二个数据库:

1)我没有关闭上面的连接并与第二个连接

mysql_connect ('host','user','password','port','dbname1');.
Run Code Online (Sandbox Code Playgroud)

2)这样做是不好的做法?它会消耗更多的物体吗?我们是否应该被要求先关闭第一个?

php mysql sql database database-connection

12
推荐指数
4
解决办法
2579
查看次数

E_WARNING:发送STMT_PREPARE数据包时出错.PID =*

截至2019-01-30 14:52 UTC,您仍然可以赢得500分Bounty,因为没有一个答案有帮助!

我的Laravel 5.7网站遇到了一些我认为彼此相关的问题(但在不同时间发生):

  1. PDO::prepare(): MySQL server has gone away
  2. E_WARNING: Error while sending STMT_PREPARE packet. PID=10
  3. PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry (我的数据库似乎经常尝试在同一秒内写两次相同的记录.我一直无法弄清楚为什么或如何重现它;它似乎与用户行为无关.)
  4. 不知何故,前两种类型的错误只出现在我的Rollbar日志中,而不是出现在服务器上或我的Slack通知中的文本日志中,因为所有错误应该是(和所有其他错误).

几个月来,我一直看到这些可怕的日志消息,而且我完全无法重现这些错误(并且无法诊断和解决它们).

我还没有发现任何实际症状或听到用户的任何抱怨,但错误消息似乎并非易事,所以我真的想了解并解决根本原因.


我已经尝试更改我的MySQL配置使用max_allowed_packet=300M(而不是默认的4M)但在我有超过几个访问者访问我的网站的日子里仍然经常得到这些例外.

由于这个建议,我还设置了(从5M和10M改为)以下内容:

innodb_buffer_pool_chunk_size=218M
innodb_buffer_pool_size = 218M
Run Code Online (Sandbox Code Playgroud)

作为进一步背景:

  • 我的站点有一个运行jobs(artisan queue:work --sleep=3 --tries=3 --daemon)的队列工作者.
  • 根据访问者的注册时间,可以在同一时间安排一系列排队的作业.但我发现同时发生的最多是20.
  • MySQL慢查询日志中没有条目.
  • 我有几个cron工作,但我怀疑他们是有问题的.一分钟运行,但非常简单.另一个是每隔5分钟运行一次,如果有任何待处理的电子邮件,则会发 另一个每30分钟运行一次报告.
  • 我已经运行了各种mysqlslap查询(虽然我完全是新手)并且即使在模拟数百个并发客户端时也没有发现任何缓慢的问题.
  • 我正在使用Laradock(Docker).
  • 我的服务器是DigitalOcean 1GB RAM,1个vCPU,25GB SSD.我也试过2GB内存没有区别.
  • 结果来自SHOW VARIABLES;SHOW GLOBAL STATUS; 在这里.

my.cnf是:

[mysql]

[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-server=utf8
innodb_buffer_pool_chunk_size=218M
innodb_buffer_pool_size …
Run Code Online (Sandbox Code Playgroud)

mysql performance laravel laravel-5 laradock

12
推荐指数
2
解决办法
1383
查看次数

是否可以将Doctrine与持久性PDO连接一起使用?

我正在尝试通过启用持久数据库连接来提高volkszaehler.org实现的性能.攻击包含了Doctrine的ConnectionPDO::ATTR_PERSISTENT => true,我得到了PDO错误General error: PDO::ATTR_STATEMENT_CLASS cannot be used with persistent PDO instances"

有没有什么办法解决这一问题?

php pdo doctrine-orm

7
推荐指数
1
解决办法
1万
查看次数

Localhost呈现页面非常慢

我的localhost渲染页面很慢.一切甚至简单的html渲染大约需要2-5秒.我研究了它并通过替换修复它:

new \PDO(... ':host=localhost' ...);
Run Code Online (Sandbox Code Playgroud)

new \PDO(... ':host=127.0.0.1' ...);
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释或给我一个链接,以了解为什么localhost正在放慢速度以及如何将其更改为IP使其变得非常快.现在它甚至可以在不到一秒的时间内渲染出复杂的查询,大约需要5-10秒.

将localhost替换为IP还有任何安全问题吗?我的意思是,如果我现场托管我的项目,我将localhost替换为主机的IP,它会对任何类型的安全性产生影响吗?

非常感谢

php apache pdo localhost

5
推荐指数
1
解决办法
3024
查看次数

什么时候必须关闭数据库连接?(JAVA)

所以我有一个Java进程无限期地作为TCP服务器运行(从另一个进程接收消息,并具有onMsg处理程序).

我想用Java程序中的消息做的事情之一是使用与postgres的数据库连接将其写入磁盘.现在,我有一个静态连接对象,我每次收到消息时都会调用它.我不会关闭并重新打开每条消息的连接.

我对Java仍然有点新意,我想知道1)使用一个无限期打开的连接对象是否存在任何陷阱或危险; 2)从不关闭连接是否有性能优势,而不是重新打开/关闭每个连接对象我想打数据库的时候?

谢谢您的帮助!

java postgresql jdbc

2
推荐指数
1
解决办法
856
查看次数