从虚拟的角度来看,所有应用程序都会使用某种形式的数据库。今天,大多数系统是运行在PHP及MySQL数据库上的,当然,也有许多新的技术已经存在或正变得越来越流行,尤其是Java及MongoDB, 此外,还有许多数据库,如PostgreSQL、Oracle、Redis、Node.js、 Ruby等等。

不幸的是,能把数据库运用的很好的案例并不多。其原因有很多,如RDBMS 及 NoSQL 系统开发员专业知识不够,或开发服务器速度太快(或服务器是空的),所以开发员从不关心性能问题,更不必说会关心到安全、运营、维护或管理问题。

然而,本篇博客的重点不是讨论这些内容,而是关注如何能够通过更有效地使用DB用户及查询来提高系统性能。

设置独立的用户- 第一条黄金法则就是为每项任务或应用程序设置独立的DB用户。DB用户设置是免费的,那么就加以利用吧!这就意味着主要站点、搜索系统、登录系统及cron作业应该使用明显的DB用户来执行所有功能,如webmain、搜索、loginsys及cron等等。

这便能够轻易地实现故障排除及监控,因为当你查看MySQL processlist、慢查询日志、及其它工具时,你就能够查看到所有的查询、用户及用户活动,能够很明显地知道谁在什么时间做了什么事。要记住,为每个独立用户设置不同的随机密码。

此外,对于每个应用程序,设置不同的用户账号,可以使用户有不同的权限。如果cron作业或搜索系统只需访问特定的数据库或表格的话,你便可以限制这些用户的其它权利。此外,你可以根据需要,使得特定的用户仅有只读权限。如果系统某个工具被黑客攻击或代码有bug的话,这种做法能切实地提高系统安全性。

查询注释-MySQL比较容易被忽略的功能就是,它可以把注释随着SQL查询一起发送出去。人们通常在SQL节点处进行注释或在测试时写上注释,但是基本不会把注释发送到服务器。然而,如果你发送出去的话,它们会出现在处理列表及日志中,在此,你可判断出查询来自哪里,为什么运行在这里等等。

这对于那些速度很慢、运行时间很长的查询来说,尤其管用。因为这些慢查询可以是任何应用程序的一部分,它们会同成百上千的SQL查询一起提交过来。可以使用命令来查看查询的节点在哪里、查询运行在哪个模块、查询的功能是什么等等,这样便可以节省很多时间,快速发现并纠正系统性能问题及其它问题。

请注意,MySQL查询中的注释会造成查询缓存丢失数据,即使SQL仍旧是原来的SQL,但是注释却改变了。但是若是使用Percona服务器便可以避免这个问题,因为该服务器在缓存之前会略过注释。尽管在其它版本中会存在补丁程序,但是如果每个查询只使用一次或查询只停留在原来的地方的话,便不会产生问题。

总的来说,在查询时配置好用户并使用好注释便可以极大地改善DB服务器的监控及故障排除性能,极大地提高了安全性、节省了许多发现和纠正问题的时间。若您在此方面有困难,您可请求您的运营团队帮助您。