MySQL-事务

查询 正在执行的事务:
SELECT * FROM information_schema.INNODB_TRX

查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

ACID

  • 原子性(Atomictity)
  • 一致性(consistent)
  • 隔离性(lsolation)
  • 持久性(durable)

并发事务处理带来的问题

  • 更新丢失(两个事务同时操作相同数据, 提交的事务会覆盖先提交的事务处理结果, 通过乐观锁可以解决)
  • 脏读(事务A读取到了事务B已经修改但未提交的数据, 如果B事务回滚, A读取的数据无效, 不符合一致性)
  • 不可重读(事务A读取到了事务B已提交的修改数据, 不符合隔离性)
  • 幻读(事务A读取到了事务B提交的新增数据, 不符合隔离性)

相关资料

mysql查看未提交的事务进程

MySQL 高性能之工具篇

整理《MySQL 高性能》- 第三版 提及的工具

信息收集

  • gnuplot R绘图 (可以对脚本收集的数据作为数据源用于图标分析) (page 47 pdf 85)
  • ab http_load JMeter (集成测试工具)
  • mysqlslap sql-bench(MySQL Benchmark Suite)
  • Super Smack
  • Database Test Suite
  • Percona's TPCC-MySQL Tool
  • sysbench

系统监控

  • 诊断间歇性问题(利用mysql命令 page 88 pdf 125)
  • pt-query-digest
  • Percona Toolkit pt-query-digest (著名工具 Maatkit mk-query-digest)
  • New Relic (software-as-service)
  • xhprof xdebug valgrind cachegrind (php性能剖析) (page 74 pdf 112)
  • IfP(instrumentation-for-php) 托管在code.google.com
  • MySQL 企业监控器(Enterprise Monitor)
  • pt-collect (percona Toolkit 中的一员) pt-stalk (最好安装gdb和oprofile)
  • pt-mysql-summary
  • pt-summary
  • pt-sift

Linux命令

  • oprofile
  • strace
  • tcpdump
  • gdb
  • pt-pmp

MySQL

  • 系统函数 BENCHMARK() (page 52 pdf 89)
  • show status
  • show profile
  • explain
  • Performance Schema (page 86 pdf 124)

收集MySQL测试脚本

#!/bin/sh
INTERVAL=5
PREFIX=$INTERVAL-sec-status
RUNFILE=/home/benchmarks/running
mysql -e 'SHOW GLOBAL VARIABLES' >> mysql-variables
while test -e $RUNFILE; do
  file=$(date +%F_%I)
  sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
  sleep $sleep
  ts="$(date +"TS %s.%N %F %T")"
  loadavg="$(uptime)"
  echo "$ts $loadavg" >> $PREFIX-${file}-status
  mysql -e 'SHOW GLOBAL STATUS' >> $PREFIX-${file}-status &
  echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatus
  mysql -e 'SHOW ENGINE INNODB STATUS\G' >> $PREFIX-${file}-innodbstatus &
  echo "$ts $loadavg" >> $PREFIX-${file}-processlist
  mysql -e 'SHOW FULL PROCESSLIST\G' >> $PREFIX-${file}-processlist &
  echo $ts
done
echo Exiting because $RUNFILE does not exist.

github-收集MySQL测试脚本

对测试数据分析脚本

#!/bin/sh
# This script converts SHOW GLOBAL STATUS into a tabulated format, one line
# per sample in the input, with the metrics divided by the time elapsed
# between samples.
awk '
  BEGIN {
    printf "#ts date time load QPS";
    fmt = " %.2f";
  }
  /^TS/ { # The timestamp lines begin with TS.
    ts = substr($2, 1, index($2, ".") - 1);
    load = NF - 2;
    diff = ts - prev_ts;
    prev_ts = ts;
    printf "\n%s %s %s %s", ts, $3, $4, substr($load, 1, length($load)-1);
  }
  /Queries/ {
    printf fmt, ($2-Queries)/diff;
    Queries=$2
  }
  ' "$@"

github-对测试数据分析脚本

相关资料

配套代码网站

spring cloud feign

Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Spring Cloud集成Ribbon和Eureka以在使用Feign时提供负载均衡的http客户端。

  • get参数复杂时会自动转成post请求
  • 无法传递多个对象

相关资料

github-OpenFeign

Spring Cloud Feign设计原理