presto 时间戳转日期
presto
format_datetime(from_unixtime(1510284058),'yyyy-MM-dd HH:mm:ss')
hive:
select from_unixtime(1323308943123,'yyyy-MM-dd HH:mm:ss')
presto
format_datetime(from_unixtime(1510284058),'yyyy-MM-dd HH:mm:ss')
hive:
select from_unixtime(1323308943123,'yyyy-MM-dd HH:mm:ss')
grep -r '' .
find . | xargs grep -r ''
用来给其他命令传递参数,因为有些命令不支持管道来传递参数。
xargs
find app/wdsapi/ -type f -name "*.php" -print0 | xargs -0 wc -l | sort -nr
当业务中需要存储大文本,比如文章内容、html页面等等,对于这类数据存储时需要考率文本长度,小了会对文本进行截取。
mysql中该字段往往用text类型存储。大文本类型有:
tinytext(0-255)、text(0-65535)、mediumtext(0-16777215)2^24、longtext(0-4,294,967,296)2^32
在设计初,可以考率对文本进行压缩再存储
php: gzcompress gzdeflate gzencode
不带参数时,发出get请求
-A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]。
$ curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com
上面命令将User-Agent改成 Chrome 浏览器。
$ curl -A '' https://google.com
上面命令会移除User-Agent标头。
也可以通过-H参数直接指定标头,更改User-Agent。
$ curl -H 'User-Agent: php/1.0' https://google.com
数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。
共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
管道(pipe)
信号量(semophore)
消息队列(message queue)
信号(signal)
共享内存(shared momory)
套接字(socket)
是内核管理的一个缓冲区,连接进程的输入和输出,linux下为4k,环形结构,以便循环利用。当管道中没有信息的话,读取进程会等待,直到有数据放入;当管道放满信息的时候,放入信息的进程会等待,直到另一端进程取出信息。
linux中,管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和vfs的索引节点inode。
通过将两个file结构指向同一个临时的vfs索引节点,而这个vfs索引节点又指向一个物理页面而实现的。
管道实现的源代码再fs/pipe.c中,在pipe.c中有很多函数,重要的是管道读pipe_read()和管道写pipe_write().
管道写通过将字节复制到vfs索引节点指向的物理内存而写入数据,而管道读则通过复制物理内存中的字节而读出数据。当然,内核必须利用一定的机制同步对管道的访问,为此,内核使用了锁,等待队列和信号。
当写进程向管道中写入时,它利用标准的库函数write(),系统根据库函数传递的文件描述符,可找到该文件的file结构。
file结构中指定了用来进行写操作的函数(即写入函数)地址,于是,内核调用该函数完成写操作。
写入函数在内存中写入数据之前,必须检查vfs索引节点中的信息,同时满足如下条件时,才能进行实际的内存复制工作:
内存中有足够的空间可容纳所有要写入的数据;
内存没有被读程序锁定。
没有实际排查过,找了一篇网上的文章。
https://www.cnblogs.com/grey-wolf/p/10936657.html
为什么会出现close_wait?
如果服务端处理时间很长,客户端等不到服务端返回,超时了,主动断开连接,发FIN,服务端回复ACK后进入close_wait
https://www.cnblogs.com/whgk/p/11066798.html
redolog记录的是页修改后的结果,write-ahead-log,替代脏页落盘(顺序IO替代随机IO)。实际是事务T改变了元素X,而X原来的值是v,这样一个T、X、v的三元组。
恢复过程
redolog和binlog保证持久化到磁盘,就能确保mysql异常重启后数据可以恢复。
事务执行过程中,先把日志写到binlog cache中,事务提交的时候再把binlog cache写入binlog文件中。
一个binlog的事务是不能拆开的,不管多大也要确保一次性写入。这就涉及binlog cache的保存。
binlog cache写入有两个过程:
1.write:多线程将binlog cache写入文件系统的page cache,但是并没有写入到磁盘,因此速度较快。
2.fsync:才是数据持久化过程。
write和fsync的时机是由参数sync_binlog控制
1.sync_binlog=0的时候,表示每次提交事务都只write,不fsync
2.sync_binlog=1时,表示每次提交都会fsync
3.sync_binlog=N(N>1),表示每次提交都write,但是积累n个后才fsync
一般都设置为100-1000,提升性能。对应的风险是,如果主机发生异常重启,会丢失这N个事务的binlog日志。
事务执行过程中,先把redolog写入redolog buffer,再将buffer写入到文件系统的page cache,还有没有持久化,最后一步是持久化到磁盘。
为了控制redolog的写入策略,innoDB提供了innoDb_flash_log_at_trx_commit参数来控制,三种可能:
1.=0,每次提交只是把redolog留在buffer
2.=1,每次都持久化到磁盘,
3.=2,每次都写到page cache
innoDB后台线程,每隔1秒会把redolog buffer中的日志,调用write写到page cache,再调用fsync写入磁盘。
注意,事务在执行过程中,redolog也是直接写到redolog buffer中的,这些redo log会被线程写入到page cache。也就是说,一个没有提交的事务的redo log也是可能被持久化到磁盘的。
除了这种情况,还有两个场景会造成没提交的事务持久化到磁盘:
1.redo log buffer占用的空间即将达到innodb_log_buffer_size的一半时,后台线程会主动写盘。但是只写到page cache。
2.并行事务提交的时候,顺带将这个事务的redo log buffer 持久化到磁盘。
问题1:为什么bin log cache是每个线程自己维护,而redo log buffer是全局共享的?
这么设计的原因是:binlog 是不能被打断的,一个事务的binlog必须连续写。因此要整个事务完成后,再一起写到文件。
而redo log没有这个要求,有日志可以写到redo log buffer,还可以搭便车,由其他事务提交时一起写到文件。
grep -i 不区分大小写
grep -v 不包含当前字符串的结果
grep -n 显示行号
grep -c 统计次数
grep -r 递归查找
grep -F 将特殊字符转为字符串
模糊查找可以用通配符%、_,%表示全部,_表示单个字符。
但是如果要匹配一个百分比字符串该怎么做呢? 比如字符串"100%"
like中转义字符''失效了
解决方法是 escape '/'
select * from table where rate like '%%%' escape '/';