0%

Java是编译型还是解释型语言

关于这个问题我想表达一下自己的看法:Java 的源代码,通过Javac编译成为字节码,然后在运行时通过Java 虚拟机内嵌的解释器将字节码转换成为最终的机器码。但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行了。

锁的理解

锁是计算机协调多个进程或线程并发访问某一资源的机制。

在数据库中,除传统的计算资源(如CPU、RAM、l/O等) 的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一一个重要因素。从这个角度来说锁对数据库而言显得尤其重要,也更加复杂。

Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。 通过show profiles查看sql语句的耗时时间,然后通过show profile命令对耗时时间长的sql语句进行诊断 。注意show profile诊断结果中出现相关字段的含义,判断是否需要优化sql语句

putty这个软件是个轻量且好用的ssh工具,Xshell、Xftp这些需要收费,有学生家庭版但是要申请,而且有一定的期限的,不是很方便。putty这个工具倒是不错,可是每次登陆需要输入密码,于是下面挤在一个无需登录密码的方式,那就是SSH密钥登录, 这种方式需要生成一组对应的公钥和密钥,然后把公钥放到Linux,私钥提供给putty。putty仍然不知道你的密码,而是通过与服务器核对密钥而核实身份。

慢查询日志

什么是慢查询日志

MySQL的慢查询日志是 MySQL提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过long_query_time 值的 SQL,则会被记录到慢查询日志中

具体指运行时间超过 long_query_time 值的 SQL,则会被记录到慢查询日志中。long_query_time 的默认值为 10, 意思是运行 10 秒以上的语句

由它来查看哪些 SQL 超出了我们的最大忍耐时间值,比如一条SQL执行超过 5 秒钟,我们就算慢 SQL,希望能收集超过 5 秒的SQL,结合之前explain进行全面分析

默认情况下,MySQL 数据库没有开启慢査询日志,需要我们手动来设置这个参数。当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢査询日志支持将日志记录写入文件!

如何开启慢查询

查看开启状态

SHOW VARIABLES LIKE '%slow_query_log%'

开启慢查询

set global slow_query_log = 1

使用 set global_slow_query_log = 1 开启了慢查询日志只对当前数据库生,如果 MYSQL 重启后则会失效。

如果要永久生效,就必须修改配置文件 my.cnf(其它系统变量也是如此)修改 my.cnf 文件,[mysqld]下增加或修改参数

slow_query_log 和 slow_query_log_file 后,然后重启 MySQL 服务器。也即将如下两行配置进my.cnf文件

slow_query_log =1

slow_query_log_file=/var/lib/mysql/tim-slow.log

关于慢查询的参数 slow_query_log_fie,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host_name-slow.log(如果没有指定参数 slow_query_log_file的话)

性能常见分析步骤

1、慢查询的开启并捕获

2、explain+慢 SQL 分析

3、show profile 查询 SQL 在 MySQL 服务器里面的执行细节和生命周期情况

4、SQL数据库服务器的参数调优。