NodeJs配置mysql连接池连接
分类专栏: Node
简介 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
<p><span style="color: rgb(38, 38, 38);">数据库连接的开销是昂贵的,处理不好连接的话,太多的连接会导致数据查询缓慢,超时等情况。而利用数据库连接池,我们可以很好的管理和复用已存</span></p><p><br></p><p><span style="color: rgb(38, 38, 38);">在的连接,从而达到节省资源,提高程序性能。</span></p><p><br></p><p><span style="color: rgb(38, 38, 38);">如何使用连接池</span></p><p><br></p><h2><strong style="color: rgb(38, 38, 38);">安装</strong></h2><p><br></p><p>在node端连接数据库,一般使用<a href="https://www.npmjs.com/package/mysql" rel="noopener noreferrer" target="_blank">mysql</a>库,安装如下:</p><p><br></p><p><span style="background-color: rgb(249, 249, 249); color: rgb(0, 92, 197);">$ npm</span><span style="background-color: rgb(249, 249, 249); color: rgb(89, 89, 89);"> install mysql </span><span style="background-color: rgb(249, 249, 249); color: rgb(111, 66, 193);">-S</span></p><p><br></p><h2><strong style="color: rgb(38, 38, 38);">单次连接</strong></h2><p><br></p><p>安装完之后,看官方给的例子如何连接数据库:</p><p><br></p><ol><li>创建连接</li><li>打开连接</li><li>查询</li><li>关闭连接</li></ol><p><br></p><p><br></p><p>var mysql = require('mysql');</p><p><br></p><p>var connection = mysql.createConnection({</p><p> host : 'localhost',</p><p> user : 'me',</p><p> password : 'secret',</p><p> database : 'my_db'</p><p>});</p><p> </p><p>connection.connect();</p><p> </p><p>connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {</p><p> if (error) throw error;</p><p> console.log('The solution is: ', results[0].solution);</p><p>});</p><p> </p><p>connection.end();</p><p><br></p><p><span style="color: rgb(38, 38, 38);">这种操作方式每次查询都要创建一个连接,如果并发大的话,就会创建很多个连接,从而导致性能下降。</span></p><p><br></p><p>使用连接池</p><p><br></p><p>var mysql = require('mysql');</p><p><br></p><p>// 创建 mysql 连接池资源</p><p><br></p><p>var pool = mysql.createPool({</p><p> host : 'localhost',</p><p> user : 'me',</p><p> password : 'secret',</p><p> database : 'my_db'</p><p> acquireTimeout: 15000, // 连接超时时间</p><p> connectionLimit: 100, // 最大连接数</p><p> waitForConnections: true, // 超过最大连接时排队</p><p> queueLimit: 0, // 排队最大数量(0 代表不做限制)</p><p>});</p><p><br></p><p>exports.query = function(sql, values) {</p><p><br></p><p> new Promise(function(resolve, reject){</p><p> //建立链接</p><p> pool.getConnection(function(err, connection) {</p><p> if (err) {</p><p> return reject(err); // not connected!</p><p> }</p><p> connection.query(sql, values, function(error, results) {</p><p> //将链接返回到连接池中,准备由其他人重复使用</p><p> connection.release();</p><p> if (error){</p><p> return reject(error);</p><p> }</p><p> resolve(results);</p><p> });</p><p> });</p><p> });</p><p>};</p><p><br></p><p><strong style="color: rgb(38, 38, 38);">连接参数说明</strong></p><p><br></p><p><span style="color: rgb(38, 38, 38);">acquireTimeout: 表示连接超时时间,默认是10000 ms;最大连接数越大,连接时间越长。建议设置 15000ms</span></p><p><br></p><p><span style="color: rgb(38, 38, 38);">connectionLimit: 最大连接数, 默认是 10; 并发操作较大时,连接数越大, 执行速度较快。经测试, 20000 并发执行数据库查询操作, 最大连接数</span></p><p><br></p><p><span style="color: rgb(38, 38, 38);">为 10时, 响应时长 14508ms; 最大连接数设置50, 300等,响应时长接近 11000ms。所以,建议最大连接数设置100。</span></p><p><br></p><p><span style="color: rgb(38, 38, 38);">waitforConnections:超过最大连接数是否等待。默认是等待,若设置成false,则超过最大连接数就报错。建议设置为true。</span></p><p><br></p><p><span style="color: rgb(38, 38, 38);">queueLimit:排队最大数量。默认为无限制,0 代表无限制。建议设置为 0。</span></p><p><br></p><h2><strong style="color: rgb(38, 38, 38);">连接数相关查询</strong></h2><p><br></p><p>查询最大连接数</p><p><br></p><p>show global variables like '%max_connections%';</p><p><br></p><p>设置最大连接数</p><p><br></p><p>set global max_connections=1000;</p><p><br></p><p>响应的最大连接数</p><p><br></p><p>show global status like 'Max_used_connections';</p><p><br></p><p>查看线程信息</p><p><br></p><p>show status like 'Threads%'</p><p><br></p><p>睡眠连接超时数</p><p><br></p><p>show global variables like 'wait_timeout';</p><p><br></p><p>杀死连接id (表: INFORMATION_SCHEMA.PROCESSLIST)</p><p><br></p><p>kill 21120003</p>
分享到:
转载:
https://www.yuque.com/linshiding/xss2bk/rg7p0a
喜欢 2
收藏
暂无评论信息
- 相关文章
- 文章推荐
-
HTML 面试知识点总结
本部分主要是笔者在复习 HTML 相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出!
-
Node 配置sequelize + mysql,根据模型自动创建数据库表
研究了一下午的node + sequelize + mysql。
-
git:如何管理本机的多个ssh密钥(多个远程仓库账号)
如果我们电脑上已经存在了一个ssh key,那么我们需要在我们电脑上生成第二个你想在本电脑上使用的id_rsa,使用命令:ssh-keygen -t rsa -C "你的github账号"。
-
亚马逊推出“无需收银员”的新技术,以此帮助品牌和广告商提高销量
北京时间 6 月 30 日早间消息,据报道,亚马逊发明了一种无需收银员的技术,可以加快人们去杂货店或便利店的速度。现在,该公司希望利用这个跟踪系统来帮助品牌和广告商提高销量。&
- 点击排行
- 站长推荐
- 猜你喜欢
- vue3.0引入vue-i18n的方式
- Node—requireDirectory实现路由自动加载
- mysql查询获取数据的同时返回总数
- rem 响应式布局公式
- Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by serv
- javascript 时钟翻牌效果
- 网友:Photoshop太贵,用不起,Adobe:拿去用,不要钱
- ie浏览器下兼容获取类名
- 天谋科技 Timecho 完成近亿元人民币天使轮融资 围绕 Apache IoTDB 打造工业物联网原生时序数据库
- 重磅推荐的图片在线压缩
- 网站信息
- 站内问答:12篇
- 站内文章:213篇
- 建站时间:已运行1244天
- 备案号: 浙ICP备2022018799号
- 语言:
- English(USA)
- French(FR)
- Chinese(ZH)
无数据