阿小信大人的头像
Talk is cheap. Show me the code. Linus Torvalds

记一次由MySQL UPDATE语句导致锁等待后引发的服务炸裂2022-05-07 00:20

goroutine数量暴增

#### 场景描述

接收到P99超时告警,定位到某接口导致,接口是由新同事实现的,逻辑较简单,是一个MySQL的INSERT OR UPDATE逻辑,
一个请求过来,判断某个非主键字段是否存在,不存在则INSERT插入,存在则按该字段UPDATE更新其他字段。
超时告警在触发与恢复之间反复触发,平均耗时6秒,接口最近无改动,已上线一段时间运行正常。

表结构:

CREATE TABLE `CAPTION` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`created_at` int(1

......
#数据库#   #mysql 评论[0]阅读全文[157]

es优化方案记录2021-08-05 15:47

image

#### 节点负载不均衡

##### 现象:

每个索引使用默认的1个分片,1个副本,在3节点集群出现__负载不均衡__现象,两个节点cpu负载很高,另外一个节点cpu负载更低。

##### 原因:
分片+副本一共2个,只能被分散到两个节点上,查询请求只能命中这两个节点。

##### 解决方案:

Es 创建索引后无法动态修改分片数,但是可以动态修改副本数,增加副本数可以分散查询请求。在不改变分片数的情况下,通过调整分片的副本数,使分片副本数+原始分片数的总数为节点数基数或倍数,以达到节点负载均衡,将索引的分片副本数增加到2,加上分片自身,一共3个,刚好均分给3个节

......
#数据库#   #elk 评论[0]阅读全文[2422]

Nginx + Lua + Redis 实现基础的令牌桶算法限流2020-06-16 17:30

image

## 关于令牌桶( token bucket )

令牌桶限流的原理是系统以一个恒定的速度往固定容量的桶里放入令牌,当有请求进来时,需要先从桶里获取并消耗一个令牌,当桶里没有令牌可取时,则拒绝服务或让请求等待。

如图:

![image](https://user-images.githubusercontent.com/2876405/84757479-cb8c3300-aff6-11ea-9be7-7d941ce1a2df.png)

每隔 1/r 秒向 bucket 中填充一个 token ;
bucket 最多只能存放 b 个 token ,如果填充 token 时

......
#数据库#   #redis #nginx 评论[0]阅读全文[3566]

CentOS7 安装 MySQL 5.7.23 并开启 MGR 多主模式2018-08-08 10:39

三台服务器,hostname分别为node1, node2, node3, 可通过hostname相互访问

卸载mariadb

rpm -qa | grep mariadb | xargs rpm -e --nodeps
rm -rf /etc/my.cnf /etc/mysql /etc/my.cnf.d

安装libaio

yum install libaio

下载Linux-Generic版本,上传到安装服务器目录/usr/local/services。

解压重命名为mysql-5.7.23

MySQL不能使用root运行

......
#数据库#   评论[0]阅读全文[4623]

[转]SQLAlchemy2015-04-02 10:27

架构图

原文:

SQLAlchemy是Python界的ORM(Object Relational Mapper)框架,它两个主要的组件: **SQLAlchemy ORM** 和 **SQLAlchemy Core** 。

![架构图](http://docs.sqlalchemy.org/en/rel_0_8/_images/sqla_arch_small.png)

####安装

pip install SQLAlchemy
#检查安装是否成功:
>>> import sqlalchemy
>>> sqlalchemy.__versio

......
#数据库#   评论[0]阅读全文[5702]

sqlite3迁移数据到postgresql2014-09-03 03:25

####从sqlite3导出sql:

sqlite3 tag17.sqlite3 .dump > tag17.sql

####修改导出的sql文件:

1. 删除`PRAGMA foreign_keys=OFF;`

2. 删除创建表语句中方括号和修改datetime为date。

####导入sql到postgresql

psql -d ashin -U ashin -f tag17.sql

如果导入命令加上`--single-transaction`参数则需要删除sql文件中的`BEGIN TRANSACTION;`和`COMMIT

......
#数据库#   #sqlite3 #postgresql 评论[0]阅读全文[5048]

PostgreSQL安装配置2014-09-03 03:24

安装PostgreSQL

$ sudo apt-get install postgresql postgresql-server-dev-9.3 #安装好后默认生成一个名为postgres的数据库和一个名为postgres的数据库用户。这里需要注意的是,同时还生成了一个名为postgres的Linux系统用户。
$ sudo -u postgres psql #修改postgres数据库密码
postgres=# \password postgres
$ sudo passwd postgres #修改postgres用

......
#数据库#   #postgresql 评论[0]阅读全文[3418]

登录远程MySQL报错解决办法2014-09-03 02:56

登录远程mysql:`$ mysql -uroot -h192.168.137.108 -p`

报错:

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.137.108' (111)

解决办法:注释掉/etc/mysql/my.cnf的bind-address = 127.0.0.1

报错:

ERROR 1130 (HY000): Host '192.168.137.108' is not allowed to connect to this MySQL ser

......
#数据库#   #mysql 评论[0]阅读全文[2396]