我被要求为一个需要企业级技能的角色筛选一些MySQL DBA/Developer职位的候选人.
我自己是一个SQL Server人员所以我知道从可扩展性/设计等角度来看我会想要什么,但是我应该问一些关于MySQL的具体问题吗?
理想情况下,我想问一下他们通常只在处理大型数据库时才使用的MySQL的企业级功能.需要将企业开发人员从家庭/小型网站中分离出来.
谢谢.
虽然SQL Server和MySQL都是RDBM,但MySQL有许多独特的功能可以说明新手和专家之间的区别.
您的第一步应该是确保候选人习惯使用命令行,而不仅仅是GUI工具,如phpMyAdmin.在访谈期间,尝试让候选人编写MySQL代码来创建数据库表或添加新索引.这些是非常基本的查询,但确切地说是GUI工具阻止新手掌握的类型.您可以与熟悉MySQL的人仔细检查答案.
候选人能否展示JOIN如何运作的知识?例如,尝试让候选者构造一个返回表1中所有行的查询,其中表2中不存在匹配的条目.答案应该包括LEFT JOIN.
让候选人讨论备份策略,以及每种策略的各种优缺点.候选人应该知道,除非所有表都是MyISAM,否则直接备份数据库文件不是一种有效的策略.候选人应该明确提到mysqldump作为备份的基石.更复杂的备份解决方案包括ibbackup/innobackup和LVM快照.理想情况下,候选人还应讨论备份如何影响性能(常见的解决方案是使用从服务器进行备份).
候选人是否具有复制经验?有哪些常见的复制配置和各自的各种优点?最常见的设置是主从设备,允许应用程序将SELECT查询卸载到从属服务器,同时使用从属设备进行备份以防止主服务器出现性能问题.另一种常见设置是master-master,主要好处是能够在不影响性能的情况下进行架构更改.确保候选人讨论常见问题,例如克隆从属服务器(mysqldump + binlog位置的符号),使用负载均衡器或MySQL代理进行负载分配,通过将更大的查询分成块来解决从属延迟,以及如何将奴隶提升为成为新的主人.
候选人如何解决性能问题?他们是否对底层操作系统和硬件有足够的了解,以诊断瓶颈是CPU绑定,IO绑定还是网络绑定?他们可以演示如何使用EXPLAIN来发现索引问题吗?他们是否提到慢查询日志或配置选项,如密钥缓冲区,tmp表大小,innodb缓冲池大小等?
候选人是否欣赏每个存储引擎的微妙之处?(MyISAM,InnoDB和MEMORY是主要的).他们是否了解每个存储引擎如何优化查询以及如何处理锁定?至少,候选人应该提到MyISAM发出表级锁,而InnODB使用行级锁.
将架构更改为实时数据库的最安全的方法是什么?候选者应提及主 - 主复制,以及通过创建具有所需配置的新表并使用mysqldump或INSERT INTO ... SELECT后跟RENAME TABLE来避免ALTER TABLE的锁定和性能问题.
最后,专业人士唯一真正的衡量标准就是经验.如果候选人无法指出在高可用性环境中管理大型数据集的特定经验,他们可能无法在纯粹的智力水平上备份他们拥有的任何知识.
我会问各种存储引擎之间的差异,它们的好处和缺点.
直接覆盖复制,并深入研究复制的缺点,尤其是在使用具有自动增量键的表时.
如果他们仍然和你在一起,那么问一下复制滞后,它的影响以及监控它的标准模式.