我正在运行一个 cron 作业(每 15 分钟一次),执行大约需要一分钟。它进行大量 API 调用并将数据存储到数据库中。
现在我在开始时创建一个 mysql 连接,并在整个代码中使用相同的连接。大部分时间都花在进行 API 调用上。
只有在存储数据时才创建一个新的数据库连接会更有效率吗(如下)?
- 终止最后一个连接
- 等待 API 调用完成
- 创建新的数据库连接
- 执行查询
- 转到 1
[编辑] 这是 MYSQL 报告。我是 mysql 的新手 - 是否有任何理由根据以下报告重新连接到数据库?
1 MySQL 5.1.26-rc-5.1.26r uptime 0 1:8:58 Tue Jun 15 21:25:03 2010
2
3 __ Key _________________________________________________________________
4 Buffer used 33.00k of 24.00M %Used: 0.13
5 Current 4.52M %Usage: 18.84
6 Write hit 33.33%
7 Read hit 69.16%
8
9 __ Questions ___________________________________________________________
10 Total 1.75k 0.4/s
11 COM_QUIT 319.92k 77.3/s %Total: 18312.
12 -Unknown 319.90k 77.3/s 18311.
13 DMS 1.53k 0.4/s 87.58
14 Com_ 199 0.0/s 11.39
15 QC Hits 1 0.0/s 0.06
16 Slow 144 0.0/s 8.24 %DMS: 9.41
17 DMS 1.53k 0.4/s 87.58
18 SELECT 1.22k 0.3/s 69.83 79.74
19 INSERT 155 0.0/s 8.87 10.13
20 UPDATE 155 0.0/s 8.87 10.13
21 REPLACE 0 0/s 0.00 0.00
22 DELETE 0 0/s 0.00 0.00
23 Com_ 199 0.0/s 11.39
24 check 86 0.0/s 4.92
25 show_status 41 0.0/s 2.35
26 set_option 23 0.0/s 1.32
27
28 __ SELECT and Sort _____________________________________________________
29 Scan 653 0.2/s %SELECT: 53.52
30 Range 0 0/s 0.00
31 Full join 0 0/s 0.00
32 Range check 0 0/s 0.00
33 Full rng join 0 0/s 0.00
34 Sort scan 0 0/s
35 Sort range 590 0.1/s
36 Sort mrg pass 0 0/s
37
38 __ Query Cache _________________________________________________________
39 Memory usage 43.57k of 12.00M %Used: 0.35
40 Block Fragmnt 25.35%
41 Hits 1 0.0/s
42 Inserts 916 0.2/s
43 Insrt:Prune 916:1 0.2/s
44 Hit:Insert 0.00:1
45
46 __ Table Locks _________________________________________________________
47 Waited 0 0/s %Total: 0.00
48 Immediate 1.65k 0.4/s
49
50 __ Tables ______________________________________________________________
51 Open 47 of 1024 %Cache: 4.59
52 Opened 54 0.0/s
53
54 __ Connections _________________________________________________________
55 Max used 3 of 60 %Max: 5.00
56 Total 319.92k 77.3/s
57
58 __ Created Temp ________________________________________________________
59 Disk table 2 0.0/s
60 Table 28 0.0/s
61 File 5 0.0/s
62
63 __ Threads _____________________________________________________________
64 Running 3 of 3
65 Cached 0 of 4 %Hit: 100
66 Created 3 0.0/s
67 Slow 0 0/s
68
69 __ Aborted _____________________________________________________________
70 Clients 0 0/s
71 Connects 319.86k 77.3/s
72
73 __ Bytes _______________________________________________________________
74 Sent 52.36M 12.7k/s
75 Received 23.17M 5.6k/s
最佳答案
断开连接并重新建立它们很少有好处。与数据库建立连接通常是一个相当繁重的过程。许多应用程序创建连接池只是为了避免这种情况:建立一些合理数量的连接,然后将它们保留很长时间,甚至可能永远保留,让每个线程或用户在需要时从池中获取连接,然后再将它们归还.
如果您遇到连接孤立的问题——查询失败并且您永远无法释放连接——真正的解决方案是实现适当的异常处理,这样就不会发生这种情况。
如果您有一个线程处于非事件连接状态,而其他线程因数据库达到其连接最大值而失败,那么,是的,您需要考虑释放连接。
旁注:MySQL 声称它可以非常快速地建立连接,因此与其他数据库引擎相比,这不是一个问题。我从未对此进行过基准测试。
关于mysql - 是否创建新的数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3051083/