1.MySQL参数autocommit生产环境设1还是0?为什么?
  在生产环境中,为了事务一致性,需要把autocommit 设置为 0
  这样可以进行事务全部成功后,在后一次性提交,如果某一步出错,可以rollback。
  在会话进修改参数命令为:
  set @@autocommit=0;
  为了设置为手动提交,可以在 my.cnf 中添加以下参数
  [mysqld]
  autocommit=0
  重启mysqld 即可生效
  mysql> select @@autocommit;
  +--------------+
  | @@autocommit |
  +--------------+
  | 0 |
  +--------------+
  1 row in set (0.00 sec)
  mysql> show variables like 'autocommit'
  -> ;
  +---------------+-------+
  | Variable_name | Value |
  +---------------+-------+
  | autocommit | OFF |
  +---------------+-------+
  1 row in set (0.01 sec)
  mysql>
  2.MySQL参数tx_isolation生产环境上大多数是设什么值,为什么?
  mysql 系统默认隔离级别为 REPEATABLE-READ
  mysql> select @@global.tx_isolation;
  +-----------------------+
  | @@global.tx_isolation |
  +-----------------------+
  | REPEATABLE-READ |
  +-----------------------+
  1 row in set (0.00 sec)
  mysql 支持以下4种隔离级别:
  1.末提交读 (read uncommited);
  2.已提交读 (read commited);
  3.可重复读 (Repeatable read);
  4.可序列化 (Serializable);
  在生产环境中,可以按照实际环境要求,进行配置,一般情况下:
  1.以读为主的业务应用场景下,可以配置成
  transaction-isolation=read-commited
  2.非读为主的业务应用场景,可以配置为:
  transaction-isolation=Repeatable-read
  而另外两种情况,一般应用比较少,如果是为了减少并行和追求稳定性,可以选择配置为
  transaction-isolation=Serializable
  3.与MySQL相关的有哪些因素?
  在mySQL 数据库中,不同的存储引擎,使用不同的锁机制。
  MyISAM,MEMORY 存储引擎,采用的是表级锁(table-level locking),
  BDB 存储引擎采用了页面锁(Page-level locking),它也支持表级锁;
  InnoDB存储引擎,采用的是行级锁(row-level locking),当然也支持表级锁。
  在4种不同的隔离级别下,为了实现事务中的ACID属性,锁的应用也不一样,
  INNODB 存储引擎的行锁模式中,是通过给索引加索引锁来实现的,所以出现以下3种锁方式:
  1.record lock :对索引项加锁
  2.Gap lock :对索引项之间的间隙加锁,
  3.Next-key lock:对记录及前后的间隙加锁;
  在应用中,如果有个表没有索引,虽然只访问了部分范围的数据,可能也会引起其它会话插入,修改的阻塞现象。