1 tomcat
tomcat的默认最大线程数maxThreads
是200,默认核心线程数(最小空闲线程数)minSpareThreads
是10。
在核心线程数满了之后,会直接启用最大线程数,当达到最大线程数后,新的请求会添加到工作队列,工作队列长度是Integer.MAX_VALUE
(2147483647)。
比较容易弄混的是maxThreads
和maxConnections
这两个参数:maxThreads
是指Tomcat线程池做多能起的线程数,而maxConnections
则是Tomcat一瞬间做多能够处理的并发连接数。
tomcat允许接收和处理的最大连接数:
-
BIO模型的默认值等于
maxThread
的值(默认200), -
NIO模型的默认值为10000,
-
APR/native的默认长度为8192。
当达到最大连接数后,新的连接请求添加到一个连接请求等待队列
比如maxThreads
=1000,maxConnections
=800,假设某一瞬间的并发时1000,那么最终Tomcat的线程数将会是800,即同时处理800个请求,剩余200进入队列“排队”,如果acceptCount
=100,那么有100个请求会被拒掉。
2 Mysql的explain
EXPLAIN命令用于分析SELECT语句的执行计划,它能够告诉我们MySQL如何执行查询,并提供了有关查询执行过程中使用的索引、表访问方式、连接方法和数据访问顺序等信息。通过分析执行计划,我们可以识别和解决查询性能问题,优化查询语句和索引设计。
返回列信息
-
id
:这是查询执行计划中的步骤编号。如果查询涉及多个表,每个表都有一个唯一的标识符,id从1开始递增。 -
select_type
:表示查询的类型,可能的取值有:SIMPLE
:简单的不包含子查询或UNION的查询。PRIMARY
:查询中包含子查询或UNION。SUBQUERY
:在SELECT或WHERE列表中包含子查询。DERIVED
:在FROM子句中包含的派生表的查询。- …
-
table
:显示查询涉及的表名。 -
partitions
:显示查询涉及的分区信息,当partitions
列为NULL
时,说明查询涉及的表没有分区,或者查询没有利用分区的特性。 -
type
:表示访问表的方式,包括:ALL
:全表扫描。INDEX
:通过索引全范围扫描。RANGE
:通过索引进行范围扫描。REF
:非唯一索引的等值查找。CONST
:常量表。- …
-
possible_keys
:显示可能应用在这张表中的索引。 -
key
:显示实际使用的索引。如果为NULL,则没有使用索引。 -
key_len
:表示索引使用的字节数。 -
ref
:显示了用于联接的索引列或常量列的信息。ref
列的可能取值取决于查询的类型和联接条件。以下是一些常见的ref
列取值:- 常量值 (
const
):表示查询中使用了常量值来匹配索引。 - 列值 (
column_name
):表示查询中使用了某一列的值来匹配索引。 - NULL:表示没有使用索引进行匹配,而是使用了全表扫描。
- 表达式 (
expression
):表示查询中使用了表达式来匹配索引,而不是简单的列值。 - 多列 (
column1, column2
):表示查询中使用了多个列的值进行索引匹配。
- 常量值 (
-
rows
:表示MySQL认为必须检查的行数,这只是一个估算值。 -
filtered
:表示返回结果的行占总表行的百分比,也是一个估算值。 -
Extra
:包含额外的执行信息,如使用了临时表、使用了文件排序等, 常见的Extra
信息包括:Using filesort
:表示MySQL正在对结果进行文件排序,可能是由于无法使用索引直接得到有序结果。Using temporary
:表示MySQL在执行查询时创建了一个临时表,通常发生在涉及到GROUP BY
或ORDER BY
的情况。Using index
:表示查询使用了覆盖索引,即查询的列都在索引中,而不需要回表到原始数据行。
如果
Extra
为NULL
,那么查询执行没有涉及到上述的特殊操作,通常是一个较为简单的查询。
3 MySQL索引
3.1 索引的优缺点
使用索引前:
使用索引后:
优点:索引大大减小了服务器需要扫描的数据量,从而大大加快数据的检索速度
缺点:
- 创建索引和维护索引要耗费时间
- 索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间
- 对表中的数据进行增、删、改的时候,索引也要动态的维护
3.2 常用索引结构
3.2.1 B-Tree索引(平衡树索引)
-
B-Tree(Balanced Tree)是一种平衡树结构,它能够在数据量较大时仍然保持较高的查询性能。
-
MySQL的默认存储引擎InnoDB使用B-Tree索引,它适用于等值查询和范围查询。
3.2.2 哈希索引
- 哈希索引使用哈希函数将索引列的值转换为哈希码,然后将哈希码存储在索引中。
- 哈希索引适用于等值查询,但不适用于范围查询,因为哈希函数的特性导致相邻的值可能被映射到远离的哈希码。
3.2.2 哈希索引
- 哈希索引使用哈希函数将索引列的值转换为哈希码,然后将哈希码存储在索引中。
- 哈希索引适用于等值查询,但不适用于范围查询,因为哈希函数的特性导致相邻的值可能被映射到远离的哈希码。