数据库主从复制的原理,会不会延迟,会该怎样解决 三个要点:网络延迟,master 负载 slave 负载 slave 对数据安全性的要求 原理 1 master 将数据改变记录到 binlog 中 2 slave 启动一个io线程,
- 数据库主从复制的原理,会不会延迟,会该怎样解决
三个要点:网络延迟,master 负载 slave 负载 slave 对数据安全性的要求
原理 1 master 将数据改变记录到 binlog 中 2 slave 启动一个io线程,从指定位置开 始同步 binlog 3 读取到 master 数据的更新,slave 写入到 replaylog 中,然后开始重 放数据Tps 是事务数/秒 qps 是每秒查询率延迟原因:主库的 tps 并发较高时,产生的 ddl 超过 slave 的执行,或者网络延迟较大 解决:减少网络延迟,关闭 slave 的 sync_binlog 设置成大点就行,累计多次事务之后 刷盘 innodb_flush_log_at_trx_commit = 2 事务提交之后刷盘,slave 上也可以关闭 这个,缺点是意外断电了会丢失数据 - 如何保障数据的可用性,即使被删库了也能恢复到分钟级别。你会怎么做。 数据库集群方案就行,删掉主库了会自动选举从库,业务保持稳定,然后就是精细化的 备份
- 数据库链接过多的原因和解决方案原因:1 配置的 max_connections 数量太少,修改配置或者 set global max_connections=xxx 就行 2 sleep 的链接回收太慢,修改 wait_timeout 就行,调 小点加速回收 3 使用连接池
- 502 504错误的原因502 是无效响应,1 nginx 无法与 php-fpm 进行连接,检查 php-fpm 是否启动 2 脚 本执行超时,然后 php-fpm 终止了执行和worker进程,也可能是高并发情况下,超过了最大子进程数量
- use 批量声明
匿名类,支持用 new class 来实例化一个匿名类,『用后即焚』 闭包(Closure)(匿名函数)增加了一个 call 方法 - 进程,线程及通信方式 https://www.php.cn/php-ask-453612.html 程的资源 进程间通信方式:1. 管道 2. 信号 3. 消息队列 Posix 消息队列 4. 共享内存 5. 套接口
- Php 查看扩展路径 php -i | grep -i extension_dir 或者 phpinfo 来看一下 或者 echo ini_get('extension_dir');
- Php 底层数组实现方式 linked list + hashtable 双向链表是中间映射表,用来存放索引和具体存储位置,然后 具体存储位置对应的具体值在 hashtable 中
- 写时复制: 如果两个变量是相同的值,则共享同一块内存,而那块内存的 is_ref =1 refcount = 1 后者被引用一次 +1,为 0 的时候被销毁,相当于资源延迟分配。 垃圾回收: 不会立即回收,会放入缓冲区(一个双向链表),然后默认到了 10000 个开始回收,先 将 refcount -1 , =0 则进行回收
- 解决内存溢出: 1、要增加PHP可用内存大小 2、对数组进行分批处理,将用过的变量及时销毁; 3、尽可能减少静态变量的使用; 4、数据库操作完成后,要马上关闭连接。 5、可以使用 memory_get_usage () 函数,获取当前占用内存 根据当前使用的内存来 调整程序 引申: 1 unset () 函数只能在变量值占用内存空间超过 256 字节时才会释放内存空间 2 有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存 3 unset 被引用的变量只会解除引用关系,不会销毁该变量