<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Postgresql on ZRJ | 学习笔记</title>
        <link>https://blog.zrj.me/tags/postgresql/</link>
        <description>Recent content in Postgresql on ZRJ | 学习笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Wed, 31 Jul 2019 20:52:30 +0800</lastBuildDate><atom:link href="https://blog.zrj.me/tags/postgresql/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>postgresql 迁移数据到 MySQL</title>
        <link>https://blog.zrj.me/posts/2019-07-31-postgresql-%E8%BF%81%E7%A7%BB%E6%95%B0%E6%8D%AE%E5%88%B0-mysql/</link>
        <pubDate>Wed, 31 Jul 2019 20:52:30 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2019-07-31-postgresql-%E8%BF%81%E7%A7%BB%E6%95%B0%E6%8D%AE%E5%88%B0-mysql/</guid>
        <description>&lt;p&gt;最近在搞 tidb，想找个方法往 MySQL 协议中快速写入数据，在 postgresql 下有 copy，找了下，MySQL 下也有 load data，其本质也是一个 insert，看到这里 &lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/seven&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/seven&lt;/a&gt;_3306/article/details/9237495 有一个思路是不走落地文件，挖坑待填&lt;/p&gt;
&lt;p&gt;===========&lt;/p&gt;
&lt;p&gt;2019-9-4 回来填坑了，具体的方法如下&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InputStream&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getPostgresqlInputStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;throws&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SQLException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ClassNotFoundException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IOException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PipedOutputStream&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PipedOutputStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;forName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.postgresql.Driver&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DriverManager&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getConnection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jdbc:postgresql://...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CopyManager&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CopyManager&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BaseConnection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COPY_CMD&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;COPY (select ... from ... where ds between &amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;01 and &amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;31 ) to STDOUT&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@SuppressWarnings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;unused&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;affectedRowCount&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;copyOut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COPY_CMD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Exception&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;printStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;finally&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SQLException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;printStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IOException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;printStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PipedInputStream&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PipedInputStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;threadTransfer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fromTpgOrFromFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csvFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;throws&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SQLException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ClassNotFoundException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IOException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;forName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;com.mysql.jdbc.Driver&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;localConnectionUrl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jdbc:mysql://...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Random&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;randomizer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Random&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;util&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;random_pool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArrayList&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;random_pool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;randomRow1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;random_pool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;randomizer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;nextInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;random_pool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;randomRow1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tidbConnectionUrl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jdbc:mysql://&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;randomRow1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;:4000/...?useSSL=false&amp;amp;characterEncoding=UTF-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DriverManager&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getConnection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tidbConnectionUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;root&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;prepareStatement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;set @@tidb_batch_delete = ON;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;execute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;prepareStatement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;set @@tidb_batch_insert = ON;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;execute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fromTpgOrFromFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loadDataSql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;LOAD DATA LOCAL INFILE &amp;#39;sql.csv&amp;#39; IGNORE INTO TABLE ...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PreparedStatement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;statement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PreparedStatement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;prepareStatement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loadDataSql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;statement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setLocalInfileInputStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getPostgresqlInputStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;statement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;executeUpdate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loadDataSql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;LOAD DATA LOCAL INFILE &amp;#39;sql.csv&amp;#39; IGNORE INTO TABLE ... FIELDS ENCLOSED BY &amp;#39;\&amp;#34;&amp;#39; TERMINATED BY &amp;#39;,&amp;#39; LINES TERMINATED BY &amp;#39;\n&amp;#39; IGNORE 1 LINES ;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PreparedStatement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;statement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PreparedStatement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;prepareStatement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loadDataSql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;statement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setLocalInfileInputStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FileInputStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/data/my_database/....&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csvFile&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;statement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;executeUpdate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;currentTimeMillis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
        <title>postgresql 文本索引 spgist 与 btree 区别</title>
        <link>https://blog.zrj.me/posts/2018-11-06-postgresql-%E6%96%87%E6%9C%AC%E7%B4%A2%E5%BC%95-spgist-%E4%B8%8E-btree-%E5%8C%BA%E5%88%AB/</link>
        <pubDate>Tue, 06 Nov 2018 22:17:31 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2018-11-06-postgresql-%E6%96%87%E6%9C%AC%E7%B4%A2%E5%BC%95-spgist-%E4%B8%8E-btree-%E5%8C%BA%E5%88%AB/</guid>
        <description>&lt;p&gt;postgresql 对文本的索引有 spgist 和 btree 两种，同样一张表，行数 140w 行左右，建立 btree 索引，执行一次 like starts with，冷启动大约 1.4s，反复多跑一次，稳定在 1.1s&lt;/p&gt;
&lt;p&gt;改成 spgist 索引呢，瞬间降到 0.03s，到底是什么黑科技，能这么明显的提速&lt;/p&gt;
&lt;p&gt;搜了一下，看到这里 &lt;a class=&#34;link&#34; href=&#34;http://www.postgres.cn/docs/9.6/spgist.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.postgres.cn/docs/9.6/spgist.html&lt;/a&gt; 大概是类似前缀索引和查找的套路&lt;/p&gt;
</description>
        </item>
        <item>
        <title>postgresql 死锁检查与处理</title>
        <link>https://blog.zrj.me/posts/2018-09-30-%E5%8D%A0%E5%9D%91%E5%BE%85%E8%A1%A5/</link>
        <pubDate>Sun, 30 Sep 2018 10:16:11 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2018-09-30-%E5%8D%A0%E5%9D%91%E5%BE%85%E8%A1%A5/</guid>
        <description>&lt;p&gt;今天在 postgresql 上执行一个 DDL 的时候卡死，其实就是一个 alter table add column 的语句&lt;/p&gt;
&lt;p&gt;那么，首先可以用这个 SQL 来看有哪些执行中的查询&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_stat_activity&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query_start&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;asc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但是从这里有两个问题，一是只能看到自己名下的，别人的 SQL 看不到具体 query，二是通过这个结果看不出到底是啥 SQL 阻塞了自己的 DDL&lt;/p&gt;
&lt;p&gt;Google 一下，看到这里， &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/26489244/how-to-detect-query-which-holds-the-lock-in-postgres&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://stackoverflow.com/questions/26489244/how-to-detect-query-which-holds-the-lock-in-postgres&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_blocking_pids&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocked_by&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocked_query&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_stat_activity&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;cardinality&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_blocking_pids&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但是可惜，这种方法只能支持到 postgresql 9.6 以上的，而我们是 9.5，但是没关系，下面又给出了另外一种方式&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SELECT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COALESCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockingl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;relation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;regclass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockingl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;locktype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;locked_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockeda&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query_start&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;waiting_duration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockeda&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocked_pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockeda&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocked_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockedl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocked_mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockinga&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocking_pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockinga&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocking_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockingl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocking_mode&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_locks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockedl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;JOIN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_stat_activity&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockeda&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ON&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockedl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockeda&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;JOIN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_locks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockingl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ON&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockingl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;transactionid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockedl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;transactionid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;OR&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockingl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;relation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockedl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;relation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockingl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;locktype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockedl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;locktype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockedl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockingl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;JOIN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_stat_activity&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockinga&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ON&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockingl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockinga&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockinga&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockeda&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;WHERE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NOT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockedl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;granted&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blockinga&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datname&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;current_database&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过这个的结果，可以清楚的看到是哪个 pid 造成了阻塞&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;locked_item	waiting_duration	blocked_pid	blocked_query	blocked_mode	blocking_pid	blocking_query	blocking_mode
...	00:02:21.268013	8131	alter table  add column ;
	AccessExclusiveLock	5227	&amp;lt;insufficient privilege&amp;gt;	AccessShareLock
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;接下来，就是处理了，看了一下，那个是个 select，那就不客气了&lt;/p&gt;
&lt;p&gt;杀掉有两种方式&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_cancel_backend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the process cannot be killed, try:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_terminate_backend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
        <title>greenplum 集群启动失败</title>
        <link>https://blog.zrj.me/posts/2018-07-06-greenplum-%E9%9B%86%E7%BE%A4%E5%90%AF%E5%8A%A8%E5%A4%B1%E8%B4%A5/</link>
        <pubDate>Fri, 06 Jul 2018 14:39:33 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2018-07-06-greenplum-%E9%9B%86%E7%BE%A4%E5%90%AF%E5%8A%A8%E5%A4%B1%E8%B4%A5/</guid>
        <description>&lt;p&gt;有一个 gp 集群，部分 seg 挂了，带伤跑了一阵子，执行过几次 gprecovery，又中断了 recovery 进程，最后发现 gprecovery 无法继续，总是会触发节点 down，然后继续作死，把之前备份的一份 datadir 的内容替换上去，再次重启 gp 集群，发现这下好了，彻底起不来，报错&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-----------------------------------------------------
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-DBID:17  FAILED  host:&amp;#39;10.240.128.21&amp;#39; datadir:&amp;#39;/data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Mirror_seg4_17&amp;#39; with reason:&amp;#39;PG_CTL failed.&amp;#39;
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-DBID:23  FAILED  host:&amp;#39;10.240.128.21&amp;#39; datadir:&amp;#39;/data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Mirror_seg10_23&amp;#39; with reason:&amp;#39;PG_CTL failed.&amp;#39;
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-DBID:6  FAILED  host:&amp;#39;10.240.128.14&amp;#39; datadir:&amp;#39;/data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Primary_seg4_6&amp;#39; with reason:&amp;#39;Failure in segment mirroring; check segment logfile&amp;#39;
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-DBID:12  FAILED  host:&amp;#39;10.240.128.14&amp;#39; datadir:&amp;#39;/data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Primary_seg10_12&amp;#39; with reason:&amp;#39;Failure in segment mirroring; check segment logfile&amp;#39;
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-DBID:3  FAILED  host:&amp;#39;10.240.128.21&amp;#39; datadir:&amp;#39;/data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Primary_seg1_3&amp;#39; with reason:&amp;#39;PG_CTL failed.&amp;#39;
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-DBID:9  FAILED  host:&amp;#39;10.240.128.21&amp;#39; datadir:&amp;#39;/data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Primary_seg7_9&amp;#39; with reason:&amp;#39;PG_CTL failed.&amp;#39;
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-----------------------------------------------------


20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-----------------------------------------------------
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-   Successful segment starts                                                     = 14
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-Failed segment starts, from mirroring connection between primary and mirror   = 2    &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-Other failed segment starts                                                   = 4    &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-Skipped segment starts (segments are marked down in configuration)            = 2    &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-----------------------------------------------------
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-Successfully started 14 of 20 segment instances, skipped 2 other segments &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-----------------------------------------------------
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-Segment instance startup failures reported
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-Failed start 6 of 20 segment instances &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-Review /data/gprds/gpAdminLogs/gpstart_20180705.log
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-----------------------------------------------------
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-****************************************************************************
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-There are 2 segment(s) marked down in the database
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-To recover from this current state, review usage of the gprecoverseg
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-management utility which will recover failed segment instance databases.
20180705:21:19:47:021616 gpstart:10:gprds-[WARNING]:-****************************************************************************
20180705:21:19:47:021616 gpstart:10:gprds-[INFO]:-Commencing parallel segment instance shutdown, please wait...
.............

20180705:21:20:11:021616 gpstart:10:gprds-[ERROR]:-gpstart error: Do not have enough valid segments to start the array.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;用 gpstart error: Do not have enough valid segments to start the array. 这个错误搜了一下，前几篇没什么收获，继续找，看到这里， &lt;a class=&#34;link&#34; href=&#34;http://blog.163.com/digoal@126/blog/static/163877040201122415843868/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://blog.163.com/digoal@126/blog/static/163877040201122415843868/&lt;/a&gt; 发现大家同样出现 &amp;lsquo;PG_CTL failed.&amp;rsquo; 的报错，所以他的解决方案是增加超时时间&lt;/p&gt;
&lt;p&gt;去看回 gpstart 的说明文档，也是有类似的阐述&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;-t | --timeout &amp;lt;number_of_seconds&amp;gt;

  Specifies a timeout in seconds to wait for a segment instance to
  start up. If a segment instance was shutdown abnormally (due to
  power failure or killing its postgres database listener process,
  for example), it may take longer to start up due to the database
  recovery and validation process. If not specified, the default timeout
  is 60 seconds.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;不过，他的日志中是明确出现了 database system was not properly shut down; automatic recovery in progress 的提示的&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2011-03-24 01:51:49.539239 CST,,,p16689,th-507526368,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;database system was interrupted at 2011-03-23 18:35:06 CST&amp;#34;,,,,,,,0,,&amp;#34;xlog.c&amp;#34;,5623,
2011-03-24 01:51:49.627039 CST,,,p16689,th-507526368,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;checkpoint record is at 111/CFA98080&amp;#34;,,,,,,,0,,&amp;#34;xlog.c&amp;#34;,5700,
2011-03-24 01:51:49.627083 CST,,,p16689,th-507526368,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;redo record is at 111/CFA98080; undo record is at 0/0; shutdown FALSE&amp;#34;,,,,,,,0,,&amp;#34;xlog.c&amp;#34;,5739,
2011-03-24 01:51:49.627099 CST,,,p16689,th-507526368,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;next transaction ID: 0/21258188; next OID: 595602762&amp;#34;,,,,,,,0,,&amp;#34;xlog.c&amp;#34;,5743,
2011-03-24 01:51:49.627110 CST,,,p16689,th-507526368,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;next MultiXactId: 1; next MultiXactOffset: 0&amp;#34;,,,,,,,0,,&amp;#34;xlog.c&amp;#34;,5746,
2011-03-24 01:51:49.627142 CST,,,p16689,th-507526368,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;database system was not properly shut down; automatic recovery in progress&amp;#34;,,,,,,,0,,&amp;#34;xlog.c&amp;#34;,5829,
2011-03-24 01:51:49.627323 CST,,,p16689,th-507526368,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;redo starts at 111/CFA980D8&amp;#34;,,,,,,,0,,&amp;#34;xlog.c&amp;#34;,5893,
2011-03-24 01:51:49.729438 CST,&amp;#34;greenplum&amp;#34;,&amp;#34;postgres&amp;#34;,p16690,th-507526368,&amp;#34;[local]&amp;#34;,,2011-03-24 01:51:49 CST,0,,,seg-1,,,,,&amp;#34;FATAL&amp;#34;,&amp;#34;57P03&amp;#34;,&amp;#34;the database system is starting up&amp;#34;,,,,,,,0,,&amp;#34;postmaster.c&amp;#34;,1887,&amp;#34;Traceback 0: 0x98615e: /opt/greenplumdb/3.3.6.1/greenplum-db-3.3.6.1/bin/postgres errstart+0x3be
Traceback 1: 0x7c10e8: /opt/greenplumdb/3.3.6.1/greenplum-db-3.3.6.1/bin/postgres +0x7c10e8
Traceback 2: 0x7c2216: /opt/greenplumdb/3.3.6.1/greenplum-db-3.3.6.1/bin/postgres +0x7c2216
Traceback 3: 0x7c35e5: /opt/greenplumdb/3.3.6.1/greenplum-db-3.3.6.1/bin/postgres PostmasterMain+0x945
Traceback 4: 0x6e533b: /opt/greenplumdb/3.3.6.1/greenplum-db-3.3.6.1/bin/postgres main+0x48b
Traceback 5: 0x3f2501d994: /lib64/libc.so.6 __libc_start_main+0xf4
Traceback 6: 0x45c899: /opt/greenplumdb/3.3.6.1/greenplum-db-3.3.6.1/bin/postgres +0x45c899
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;反观我们的日志，提示的是&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[gprds@10 /data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Primary_seg4_6/pg_log]$ cat -n postgresql-21.log
2018-07-05 21:09:45.067408 CST,&amp;#34;gprds&amp;#34;,&amp;#34;postgres&amp;#34;,p46768,th365434944,&amp;#34;[local]&amp;#34;,,2018-07-05 21:09:45 CST,0,,,seg-1,,,,,&amp;#34;FATAL&amp;#34;,&amp;#34;57M01&amp;#34;,&amp;#34;the database system is in mirror or uninitialized mode&amp;#34;,,,,,,,0,,&amp;#34;postmaster.c&amp;#34;,2946,
2018-07-05 21:09:45.269644 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;setsockopt(TCP_KEEPCNT) failed: Invalid argument&amp;#34;,,,,,,,0,,&amp;#34;pqcomm.c&amp;#34;,1953,
2018-07-05 21:09:45.270808 CST,,,p46772,th365434944,&amp;#34;127.0.0.1&amp;#34;,&amp;#34;8902&amp;#34;,2018-07-05 21:09:45 CST,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;received transition request packet. processing the request&amp;#34;,,,,,,,0,,&amp;#34;postmaster.c&amp;#34;,2696,
2018-07-05 21:09:45.271015 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: shutting down filerep backends&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,1988,
2018-07-05 21:09:45.271044 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep backends to shutdown&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,1991,
2018-07-05 21:09:45.271068 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: shutting down filerep&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,1998,
2018-07-05 21:09:45.271101 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep to shutdown&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2001,
2018-07-05 21:09:45.271131 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: completed filerep to shutdown&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2004,
2018-07-05 21:09:45.271155 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: initializing XLog Startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2011,
2018-07-05 21:09:45.271207 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: starting filerep&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2049,
2018-07-05 21:09:45.271636 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:09:45.271911 CST,,,p46773,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;role not initialized&amp;#39; mirroring state &amp;#39;not initialized&amp;#39; segment state &amp;#39;not initialized&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46773)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2598&amp;#39; &amp;#39;FileRep_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.271954 CST,,,p46773,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;guc &amp;#39;gp_segment_connect_timeout&amp;#39; value &amp;#39;600&amp;#39; &amp;#39;, mirroring role &amp;#39;role not initialized&amp;#39; mirroring state &amp;#39;not initialized&amp;#39; segment state &amp;#39;not initialized&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46773)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2724&amp;#39; &amp;#39;FileRep_SetFileRepRetry&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.276103 CST,,,p46773,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;mirror transition, primary address(port) &amp;#39;10.240.128.14(40011)&amp;#39; mirror address(port) &amp;#39;10.240.128.21(40011)&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;not initialized&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46773)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L3514&amp;#39; &amp;#39;FileRep_Main&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.276155 CST,,,p46773,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;mirror transition, primary address(port) &amp;#39;10.240.128.14(40011)&amp;#39; mirror address(port) &amp;#39;10.240.128.21(40011)&amp;#39;&amp;#34;,,,,,&amp;#34;mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46773)&amp;#39; filerep state &amp;#39;not initialized&amp;#39; &amp;#34;,,0,,&amp;#34;cdbfilerep.c&amp;#34;,3524,
2018-07-05 21:09:45.277155 CST,,,p46774,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary receiver ack process(46774)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.277210 CST,,,p46774,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;start receiver ack&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary receiver ack process(46774)&amp;#39; &amp;#39;cdbfilerepprimaryack.c&amp;#39; &amp;#39;L123&amp;#39; &amp;#39;FileRepAckPrimary_StartReceiver&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.277255 CST,,,p46774,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;primary address(port) &amp;#39;10.240.128.14(40011)&amp;#39; mirror address(port) &amp;#39;10.240.128.21(40011)&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary receiver ack process(46774)&amp;#39; &amp;#39;cdbfilerepprimaryack.c&amp;#39; &amp;#39;L134&amp;#39; &amp;#39;FileRepAckPrimary_StartReceiver&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.277374 CST,,,p46775,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary sender process(46775)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.277441 CST,,,p46775,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;start sender&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary sender process(46775)&amp;#39; &amp;#39;cdbfilerepprimary.c&amp;#39; &amp;#39;L1519&amp;#39; &amp;#39;FileRepPrimary_StartSender&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.277478 CST,,,p46775,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;primary address(port) &amp;#39;10.240.128.14(40011)&amp;#39; mirror address(port) &amp;#39;10.240.128.21(40011)&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary sender process(46775)&amp;#39; &amp;#39;cdbfilerepprimary.c&amp;#39; &amp;#39;L1530&amp;#39; &amp;#39;FileRepPrimary_StartSender&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.277520 CST,,,p46776,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary consumer ack process(46776)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.277554 CST,,,p46776,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;run consumer&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary consumer ack process(46776)&amp;#39; &amp;#39;cdbfilerepprimaryack.c&amp;#39; &amp;#39;L907&amp;#39; &amp;#39;FileRepAckPrimary_StartConsumer&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.277713 CST,,,p46777,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary recovery process(46777)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.278881 CST,,,p46777,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;start recovery&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary recovery process(46777)&amp;#39; &amp;#39;cdbfilerepprimaryrecovery.c&amp;#39; &amp;#39;L41&amp;#39; &amp;#39;FileRepPrimary_StartRecovery&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:09:45.278924 CST,,,p46777,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;run recovery&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary recovery process(46777)&amp;#39; &amp;#39;cdbfilerepprimaryrecovery.c&amp;#39; &amp;#39;L80&amp;#39; &amp;#39;FileRepPrimary_StartRecoveryInSync&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:10:35.549605 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:11:25.828588 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:12:16.105980 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:13:06.385168 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:13:56.663586 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:14:46.941051 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:15:37.219287 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:16:27.498683 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:17:17.778104 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:18:08.056911 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:18:58.336861 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:19:45.023110 CST,,,p46775,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary sender process(46775)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.023196 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;PostmasterPrimaryMirrorTransition (2) Finished with Error&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,1708,
2018-07-05 21:19:45.023225 CST,,,p46775,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(46775)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.023258 CST,,,p46775,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(46775)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.023291 CST,,,p46775,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(46775)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.023325 CST,,,p46776,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;run consumer&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary consumer ack process(46776)&amp;#39; &amp;#39;cdbfilerepprimaryack.c&amp;#39; &amp;#39;L966&amp;#39; &amp;#39;FileRepAckPrimary_RunConsumer&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.023360 CST,,,p46777,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;run recovery of flat files&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary recovery process(46777)&amp;#39; &amp;#39;cdbfilerepprimaryrecovery.c&amp;#39; &amp;#39;L145&amp;#39; &amp;#39;FileRepPrimary_RunRecoveryInSync&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.023416 CST,,,p46775,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(46775)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.023447 CST,,,p46776,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary consumer ack process(46776)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.023477 CST,,,p46776,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary consumer ack process(46776)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.023512 CST,,,p46777,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;failure is detected in segment mirroring, failover requested&amp;#34;,,,,,&amp;#34;mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; process name(pid) &amp;#39;primary recovery process(46777)&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; &amp;#34;,,0,,&amp;#34;cdbfilerepprimary.c&amp;#34;,265,
2018-07-05 21:19:45.028875 CST,,,p46772,th365434944,&amp;#34;127.0.0.1&amp;#34;,&amp;#34;8902&amp;#34;,2018-07-05 21:09:45 CST,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;PrimaryMirrorTransitionRequest (2) Result: Transition to primary/mirror mode PrimarySegment, data state InSync resulted in Error&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,1324,
2018-07-05 21:19:45.042936 CST,,,p46774,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary receiver ack process(46774)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.042991 CST,,,p46774,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary receiver ack process(46774)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:58.308632 CST,,,p46754,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;received immediate shutdown request&amp;#34;,,,,,,,0,,&amp;#34;postmaster.c&amp;#34;,4112,
2018-07-05 21:19:58.309333 CST,,,p46773,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary receiver ack process&amp;#39; process pid &amp;#39;46774&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46773)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:58.309411 CST,,,p46773,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary consumer ack process&amp;#39; process pid &amp;#39;46776&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46773)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:58.309485 CST,,,p46773,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary recovery process&amp;#39; process pid &amp;#39;46777&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primaryrole&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46773)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:58.309736 CST,,,p46773,th365434944,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary sender process&amp;#39; process pid &amp;#39;46775&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46773)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以及&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[gprds@10 /data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Primary_seg10_12/pg_log]$ cat -n postgresql-21.log
2018-07-05 21:10:35.566722 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:11:25.844929 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:12:16.122051 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:13:06.399411 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:13:56.675466 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:14:46.953732 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:15:37.230129 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:16:27.505817 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:17:17.782397 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:18:08.060997 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:18:58.339081 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:19:45.028348 CST,,,p46782,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary sender process(46782)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.028424 CST,,,p46782,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(46782)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.028470 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;PostmasterPrimaryMirrorTransition (2) Finished with Error&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,1708,
2018-07-05 21:19:45.028495 CST,,,p46782,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39;filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(46782)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.028528 CST,,,p46782,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(46782)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.028564 CST,,,p46782,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(46782)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.028596 CST,,,p46783,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;run consumer&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary consumer ack process(46783)&amp;#39; &amp;#39;cdbfilerepprimaryack.c&amp;#39; &amp;#39;L966&amp;#39; &amp;#39;FileRepAckPrimary_RunConsumer&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.028630 CST,,,p46784,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;run recovery of flat files&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary recovery process(46784)&amp;#39; &amp;#39;cdbfilerepprimaryrecovery.c&amp;#39; &amp;#39;L145&amp;#39; &amp;#39;FileRepPrimary_RunRecoveryInSync&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.028680 CST,,,p46783,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary consumer ack process(46783)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.028711 CST,,,p46783,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary consumer ack process(46783)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.028746 CST,,,p46784,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;failure is detected in segment mirroring, failover requested&amp;#34;,,,,,&amp;#34;mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; process name(pid) &amp;#39;primary recovery process(46784)&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; &amp;#34;,,0,,&amp;#34;cdbfilerepprimary.c&amp;#34;,265,
2018-07-05 21:19:45.037534 CST,,,p46779,th479004736,&amp;#34;127.0.0.1&amp;#34;,&amp;#34;41654&amp;#34;,2018-07-05 21:09:45 CST,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;PrimaryMirrorTransitionRequest (2) Result: Transition to primary/mirror mode PrimarySegment, data state InSync resulted in Error&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,1324,
2018-07-05 21:19:45.060347 CST,,,p46781,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary receiver ack process(46781)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:45.060419 CST,,,p46781,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary receiver ack process(46781)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:58.308578 CST,,,p46753,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;received immediate shutdown request&amp;#34;,,,,,,,0,,&amp;#34;postmaster.c&amp;#34;,4112,
2018-07-05 21:19:58.309359 CST,,,p46780,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary receiver ack process&amp;#39; process pid &amp;#39;46781&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46780)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:58.309401 CST,,,p46780,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary consumer ack process&amp;#39; process pid &amp;#39;46783&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46780)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:58.309523 CST,,,p46780,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary recovery process&amp;#39; process pid &amp;#39;46784&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primaryrole&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46780)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 21:19:58.309843 CST,,,p46780,th479004736,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary sender process&amp;#39; process pid &amp;#39;46782&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(46780)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其中也有提到 recovery，不过并不是那么的明确&lt;/p&gt;
&lt;p&gt;不过死马当作活马医，还是试试在主节点上执行 gpstart -B 1 -t 3600 -v 看看，其中 -B 1 让他串行，-t 3600 把超时置为一个钟，-v 让他打印详细日志&lt;/p&gt;
&lt;p&gt;但是依然在启动到 QE_Primary_seg10_12 的时候失败，从报错看，还是类似的报错&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2018-07-05 21:56:08.740151 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:56:59.017695 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:57:49.296098 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:58:39.574285 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 21:59:29.852117 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 22:00:20.129710 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 22:01:10.407472 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 22:02:00.687284 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 22:02:50.967451 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 22:03:41.246303 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 22:04:31.527052 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;TransitiontoPrimary: waiting for filerep startup&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,2054,
2018-07-05 22:05:18.008223 CST,,,p59333,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary sender process(59333)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.008310 CST,,,p59333,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(59333)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.008353 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;PostmasterPrimaryMirrorTransition (2) Finished with Error&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,1708,
2018-07-05 22:05:18.008390 CST,,,p59333,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(59333)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.008432 CST,,,p59333,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(59333)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.008469 CST,,,p59333,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary sender process(59333)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.008506 CST,,,p59337,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;run recovery of flat files&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary recovery process(59337)&amp;#39; &amp;#39;cdbfilerepprimaryrecovery.c&amp;#39; &amp;#39;L145&amp;#39; &amp;#39;FileRepPrimary_RunRecoveryInSync&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.008568 CST,,,p59335,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;run consumer&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;initialization and recovery&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; process name(pid) &amp;#39;primary consumer ack process(59335)&amp;#39; &amp;#39;cdbfilerepprimaryack.c&amp;#39; &amp;#39;L966&amp;#39; &amp;#39;FileRepAckPrimary_RunConsumer&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.008607 CST,,,p59335,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary consumer ack process(59335)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.008642 CST,,,p59335,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary consumer ack process(59335)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.008682 CST,,,p59328,th-1729120192,&amp;#34;127.0.0.1&amp;#34;,&amp;#34;53902&amp;#34;,2018-07-05 21:55:18 CST,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;PrimaryMirrorTransitionRequest (2) Result: Transition to primary/mirror mode PrimarySegment, data state InSync resulted in Error&amp;#34;,,,,,,,0,,&amp;#34;primary_mirror_mode.c&amp;#34;,1324,
2018-07-05 22:05:18.008717 CST,,,p59337,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;failure is detected in segment mirroring, failover requested&amp;#34;,,,,,&amp;#34;mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; process name(pid) &amp;#39;primary recovery process(59337)&amp;#39; filerep state &amp;#39;initialization and recovery&amp;#39; &amp;#34;,,0,,&amp;#34;cdbfilerepprimary.c&amp;#34;,265,
2018-07-05 22:05:18.028315 CST,,,p59331,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set segment state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary receiver ack process(59331)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2457&amp;#39; &amp;#39;FileRep_SetSegmentState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:18.028373 CST,,,p59331,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;set filerep state&amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in fault&amp;#39; filerep state &amp;#39;fault&amp;#39; process name(pid) &amp;#39;primary receiver ack process(59331)&amp;#39; &amp;#39;cdbfilerepservice.c&amp;#39; &amp;#39;L565&amp;#39; &amp;#39;FileRepSubProcess_SetState&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:32.044313 CST,,,p59312,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;received immediate shutdown request&amp;#34;,,,,,,,0,,&amp;#34;postmaster.c&amp;#34;,4112,
2018-07-05 22:05:32.044937 CST,,,p59330,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary consumer ack process&amp;#39; process pid &amp;#39;59335&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(59330)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:32.044984 CST,,,p59330,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary recovery process&amp;#39; process pid &amp;#39;59337&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39;mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(59330)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:32.045051 CST,,,p59330,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary receiver ack process&amp;#39; process pid &amp;#39;59331&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(59330)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
2018-07-05 22:05:32.045410 CST,,,p59330,th-1729120192,,,,0,,,seg-1,,,,,&amp;#34;LOG&amp;#34;,&amp;#34;00000&amp;#34;,&amp;#34;&amp;#39;process exit, process name &amp;#39;primary sender process&amp;#39; process pid &amp;#39;59333&amp;#39; exit status &amp;#39;2&amp;#39; &amp;#39;, mirroring role &amp;#39;primary role&amp;#39; mirroring state &amp;#39;sync&amp;#39; segment state &amp;#39;in immediate shutdown&amp;#39; filerep state &amp;#39;not initialized&amp;#39; process name(pid) &amp;#39;filerep main process(59330)&amp;#39; &amp;#39;cdbfilerep.c&amp;#39; &amp;#39;L2129&amp;#39; &amp;#39;LogChildExit&amp;#39;&amp;#34;,,,,,,,0,,&amp;#34;cdbfilerep.c&amp;#34;,1839,
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;仔细读了一下日志，原因应该是从 filerep state &amp;lsquo;fault&amp;rsquo; 这里开始导致的，并因此导致了 data state InSync resulted in Error 最后进程结束退出&lt;/p&gt;
&lt;p&gt;拿着这个 filerep state &amp;lsquo;fault&amp;rsquo; 搜一下呢？很欣喜的发现来到了无人区，全网只有一条结果 &lt;a class=&#34;link&#34; href=&#34;https://github.com/greenplum-db/gpdb/issues/1397&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/greenplum-db/gpdb/issues/1397&lt;/a&gt; 并且还没什么解决方案&lt;/p&gt;
&lt;p&gt;于是接下来就开始进入自主探索阶段，首先想到去 QE_Primary_seg10_12 的 Mirror 节点看看，在 /data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Mirror_seg10_23/pg_log 我们从日志中发现这么一个提示&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2018-07-05 13:54:14.508270 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;logging_collector&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.508881 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;log_destination&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.509455 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;log_directory&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.509982 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;log_destination&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.510511 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;log_directory&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.511090 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;logging_collector&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.511640 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;log_destination&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.512169 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;log_directory&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.512692 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;log_destination&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.513231 GMT,,,p40047,th63346752,,,,0,,,seg-1,,,,,&amp;#34;WARNING&amp;#34;,&amp;#34;01000&amp;#34;,&amp;#34;&amp;#34;&amp;#34;log_directory&amp;#34;&amp;#34;: setting is ignored because it is defunct&amp;#34;,,,,,,,,&amp;#34;set_config_option&amp;#34;,&amp;#34;guc.c&amp;#34;,4641,
2018-07-05 13:54:14.514707 GMT,,,p40050,th63346752,,,,0,,,seg-1,,,,,&amp;#34;FATAL&amp;#34;,&amp;#34;53100&amp;#34;,&amp;#34;could not write lock file &amp;#34;&amp;#34;postmaster.pid&amp;#34;&amp;#34;: No space left on device&amp;#34;,,,,,,,,&amp;#34;CreateLockFile&amp;#34;,&amp;#34;miscinit.c&amp;#34;,1019,1 0x8c9846 postgres errstart + 0x1f6
2    0x8da406 postgres &amp;lt;symbol not found&amp;gt; + 0x8da406
3    0x768d3a postgres PostmasterMain + 0x88a
4    0x488ddb postgres main + 0x3bb
5    0x7f8a0281eb35 libc.so.6 __libc_start_main + 0xf5
6    0x488ef9 postgres &amp;lt;symbol not found&amp;gt; + 0x488ef9
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;说是磁盘没有空间了，顺手 df -h 看一眼&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[gprds@10 /data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Mirror_seg10_23/pg_log]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        20G  3.5G   16G  19% /
devtmpfs         32G     0   32G   0% /dev
tmpfs            32G   16K   32G   1% /dev/shm
tmpfs            32G  3.2G   29G  11% /run
tmpfs            32G     0   32G   0% /sys/fs/cgroup
/dev/sda3        20G  857M   18G   5% /usr/local
/dev/sda4       1.8T   14G  1.7T   1% /data
/dev/md127p1    9.1T  8.6T     0 100% /data1
tmpfs           6.3G     0  6.3G   0% /run/user/0
tmpfs           6.3G     0  6.3G   0% /run/user/1000
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我的天，9.1T 的盘被吃的干干净净，这是什么情况&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[gprds@10 /data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10]$ du -h --max-depth=1
3.0T	./QE_Primary_seg7_9
78G	./QE_Mirror_seg4_17
5.5T	./QE_Primary_seg1_3
76G	./QE_Mirror_seg10_23
8.6T	.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;进去这两个一看发现 core 得尸横遍野&lt;/p&gt;
&lt;p&gt;连删都删不掉&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[gprds@10 /data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Primary_seg1_3]$ rm core.61416
mkdir: cannot create directory &amp;#39;/data1/.Trash/gprds/2018070522&amp;#39;: No space left on device
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看起来是 alias 了 rm 命令，但是看了一下 alias 又没有&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[gprds@10 /data1/gprds/RDSDIR/db_data/data/Greenplum/4.3.8.2/data/greenplum-da21lyj10/QE_Primary_seg1_3]$ alias
alias egrep=&amp;#39;egrep --color=auto&amp;#39;
alias fgrep=&amp;#39;fgrep --color=auto&amp;#39;
alias grep=&amp;#39;grep --color=auto&amp;#39;
alias l.=&amp;#39;ls -d .* --color=auto&amp;#39;
alias ll=&amp;#39;ls -l --color=auto&amp;#39;
alias ls=&amp;#39;ls --color=auto&amp;#39;
alias vi=&amp;#39;vim&amp;#39;
alias which=&amp;#39;alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;不管，先 echo &amp;quot;&amp;quot; &amp;gt; core.61416 清掉一个文件的内容再说，剩下的 core 一个个删除，但是发现删除的东西都被移动到 Trash 里面，空间并没有释放出来&lt;/p&gt;
&lt;p&gt;于是尝试用 unlink 来删除 core 文件，发现这个是个好东西，可以把文件删掉，但是比较慢，删除一个 10G 的 core 文件要好一会，试了试 find ./ -name &amp;ldquo;core.48980&amp;rdquo; -delete 的方式，也是差不多一样慢，不过好在都可以把文件删掉&lt;/p&gt;
&lt;p&gt;腾出来空间之后再次通过 gpstart -B 1 -t 3600 -v 来尝试启动集群，这回总算把集群启动起来了&lt;/p&gt;
&lt;p&gt;但是这样并没有解决集群的数据恢复问题，于是冒着作死的精神，又把之前那份备份的 Mirror 节点的 datadir 拷贝过来了&lt;/p&gt;
&lt;p&gt;居然可以起来，于是重新开始 gprecoverseg -F 的漫长过程&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;历史评论&#34;&gt;历史评论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;house&lt;/strong&gt; (2018-08-31 11:27:52):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;牛逼 哈哈&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;ZRJ&lt;/strong&gt; (2018-08-31 19:18:23):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;牛个毛线，然而最后并没有恢复成功&lt;/p&gt;
&lt;p&gt;一顿操作猛如虎，一看战绩零比五&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;house&lt;/strong&gt; (2018-09-01 00:14:11):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我一般就卡在google结果为空的步骤了&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>postgresql 统计表大小</title>
        <link>https://blog.zrj.me/posts/2018-05-11-postgresql-%E7%BB%9F%E8%AE%A1%E8%A1%A8%E5%A4%A7%E5%B0%8F/</link>
        <pubDate>Fri, 11 May 2018 17:51:04 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2018-05-11-postgresql-%E7%BB%9F%E8%AE%A1%E8%A1%A8%E5%A4%A7%E5%B0%8F/</guid>
        <description>&lt;p&gt;分享一个统计 postgresql 表大小的 sql&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_size_in_bytes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_schema&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_size_pretty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_total_relation_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)::&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;bigint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_humanreadable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_total_relation_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;information_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tables&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ALL_SCHEMA&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_schema&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ALL_TABLE&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_size_pretty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)::&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;bigint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_humanreadable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_size_in_bytes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;union&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_schema&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ALL_TABLE&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_size_pretty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)::&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;bigint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_humanreadable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_size_in_bytes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_schema&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;union&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_schema&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_humanreadable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table_size_in_bytes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_in_byte&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
        <title>postgresql 一些坑</title>
        <link>https://blog.zrj.me/posts/2017-11-30-postgresql-%E4%B8%80%E4%BA%9B%E5%9D%91/</link>
        <pubDate>Thu, 30 Nov 2017 00:04:08 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2017-11-30-postgresql-%E4%B8%80%E4%BA%9B%E5%9D%91/</guid>
        <description>&lt;p&gt;看到这里， &lt;a class=&#34;link&#34; href=&#34;https://www.zhihu.com/question/20010554&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.zhihu.com/question/20010554&lt;/a&gt; 在总结 pg 的一些好处&lt;/p&gt;
&lt;p&gt;但是，个人实际用下来，pg 的两个大坑，一个是 auto vacuum 不生效，慢，而且没用，vacuum full 更慢，而且效果不明显，mvcc 我可以理解，但是不应该空间膨胀来作为代价吧&lt;/p&gt;
&lt;p&gt;另外一个，就是慢查询日志，这个貌似还要通过插件来实现，还没细究&lt;/p&gt;
&lt;p&gt;=============&lt;/p&gt;
&lt;p&gt;2017-11-30 00:15:22 &lt;a class=&#34;link&#34; href=&#34;https://yq.aliyun.com/ask/25&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://yq.aliyun.com/ask/25&lt;/a&gt; 这里提到用 log_min_duration_statement 的配置，应该是一个更好的办法&lt;/p&gt;
</description>
        </item>
        <item>
        <title>postgresql 表大小控制</title>
        <link>https://blog.zrj.me/posts/2017-09-29-postgresql-%E8%A1%A8%E5%A4%A7%E5%B0%8F%E6%8E%A7%E5%88%B6/</link>
        <pubDate>Fri, 29 Sep 2017 20:41:10 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2017-09-29-postgresql-%E8%A1%A8%E5%A4%A7%E5%B0%8F%E6%8E%A7%E5%88%B6/</guid>
        <description>&lt;p&gt;如果在构造一张很宽的 postgresql 表的时候，发现表磁盘占用膨胀的很厉害，且这张宽表是一张稀疏表，那么可以把所有的稀疏字段都用 null 赋值（而不是 0）&lt;/p&gt;
&lt;p&gt;这个心得貌似很简单，但是花费了我好大周折才总结出来，表空间缩小很显著&lt;/p&gt;
</description>
        </item>
        <item>
        <title>spark 写 gp/tpg 效率优化 —— 写入 237w 行数据耗时从 77 分钟到 34 秒</title>
        <link>https://blog.zrj.me/posts/2017-07-27-spark-%E5%86%99-gptpg-%E6%95%88%E7%8E%87%E4%BC%98%E5%8C%96-%E5%86%99%E5%85%A5-237w-%E8%A1%8C%E6%95%B0%E6%8D%AE%E8%80%97%E6%97%B6%E4%BB%8E-77-%E5%88%86%E9%92%9F%E5%88%B0-34/</link>
        <pubDate>Thu, 27 Jul 2017 09:38:06 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2017-07-27-spark-%E5%86%99-gptpg-%E6%95%88%E7%8E%87%E4%BC%98%E5%8C%96-%E5%86%99%E5%85%A5-237w-%E8%A1%8C%E6%95%B0%E6%8D%AE%E8%80%97%E6%97%B6%E4%BB%8E-77-%E5%88%86%E9%92%9F%E5%88%B0-34/</guid>
        <description>&lt;p&gt;摘自内部分享，有删减。&lt;/p&gt;
&lt;p&gt;具体到我们这次的场景中，我们用的是 gp，gp 全称是 greenplum，是一个 mpp 版本的 postgresql，可以参考这个简介 &lt;a class=&#34;link&#34; href=&#34;http://www.infoq.com/cn/news/2015/11/PostgreSQL-Pivotal&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.infoq.com/cn/news/2015/11/PostgreSQL-Pivotal&lt;/a&gt; ，协议上兼容 postgresql，我们可以用普通能连 postgresql 的方式去连 gp，并且把 gp 看成一个黑盒的集群版本的 postgresql 来使用&lt;/p&gt;
&lt;p&gt;然后这次的优化的手段也很简单，就是从原来的 jdbc 连接拼 sql 改成用 org.postgresql.copy.CopyManager，类似 postgresql 命令行下的 \copy 命令，所以一句话就能说完，而写这个文章的点主要是分享一下这个过程中的一些思路历程和细节&lt;/p&gt;
&lt;p&gt;对比图&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;//zrj.me/wp-content/uploads/2017/07/1501056179_100_w367_h360.png&#34; &gt;&lt;img src=&#34;https://blog.zrj.me/images/1501056179_100_w367_h360.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;1501056179\_100\_w367\_h360&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;作为对比，我们原先的数据写入方式是 jdbc 连上之后拼 insert 语句，应该说这种方式在 OLTP 场景下是很适用的，但是在 OLAP 场景下效率问题就开始显现出来了，耗时不仅仅产生在写入端拼 query string 的开销上，更重的是在 db server 端去 parse query 的耗时成本，以及附带衍生的事务，回滚日志等开销成本。&lt;/p&gt;
&lt;p&gt;那么 gp 作为一个立足于大量数据处理的 RDBMS，肯定要对数据的 IO 有一个解决方案的，官方是怎么来解决这个问题的呢，看到这里，&lt;a class=&#34;link&#34; href=&#34;https://gpdb.docs.pivotal.io/4320/admin_guide/load.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://gpdb.docs.pivotal.io/4320/admin_guide/load.html&lt;/a&gt; ，官方主要提供了几种方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gpdb.docs.pivotal.io/4320/admin_guide/load.html#topic3&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;External Tables&lt;/a&gt; enable accessing external files as if they are regular database tables.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gpdb.docs.pivotal.io/4320/admin_guide/load.html#topic4&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;gpload&lt;/a&gt; provides an interface to the Greenplum Database parallel loader.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gpdb.docs.pivotal.io/4320/admin_guide/load.html#topic5&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;COPY&lt;/a&gt; is the standard PostgreSQL non-parallel data loading tool.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中，外部表的方式可以通过以下几种实现达成&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gpfdist: points to a directory on the file host and serves external data files to all Greenplum Database segments in parallel.&lt;/li&gt;
&lt;li&gt;gpfdists: the secure version of gpfdist.&lt;/li&gt;
&lt;li&gt;file:// accesses external data files on a segment host that the Greenplum superuser (gpadmin) can access.&lt;/li&gt;
&lt;li&gt;gphdfs: accesses files on a Hadoop Distributed File System (HDFS).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;gpfdist 可以把一个外部机器上的数据文件让所有 seg 节点能访问到，因而就可以并行的载入数据，gpfdists 是一个安全版本的 gpfdist，但是这种方式存在一些问题考量：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;需要在 seg 节点上额外安装部署程序&lt;/li&gt;
&lt;li&gt;不兼容 tpg（tpg 本身就没有 seg 节点的概念，囧）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以没有选用，而 gphdfs 这种方式，能够让 gp 连上 hdfs 去读数据，也是并行的，但是出于以下考量也最终没有采用&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;我们的 tdw 的 hdfs 带了自定义的鉴权&lt;/li&gt;
&lt;li&gt;我们在 hive 表中的存储格式并不是平坦的二维表，由于指标的值稀疏，我们使用的是类似 postgresql 的 hstore 的存储格式，而这种形式并不利于直接表对表的拷到 gp 中成为一张平坦的表&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;而 gpload 其实就是一个外部表的载入界面封装&lt;/p&gt;
&lt;p&gt;The gpload data loading utility is the interface to Greenplum’s external table parallel loading feature.&lt;/p&gt;
&lt;p&gt;所以最终我们的选择就落在了 copy 上，用 copy 的好处主要是&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;是 postgresql 的标准工具，无缝兼容 gp 与 tpg，一次干活到处使用&lt;/li&gt;
&lt;li&gt;不需要额外的依赖与安装部署，对目标 server 没有特殊要求&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;虽然，在官方的介绍中说了 copy 是一个非并行的工具，但是，实测下来，copy 的效率并不低&lt;/p&gt;
&lt;p&gt;用 copy 有两种方式，一种是在命令行上用，参考 &lt;a class=&#34;link&#34; href=&#34;https://www.postgresql.org/docs/9.2/static/sql-copy.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.postgresql.org/docs/9.2/static/sql-copy.html&lt;/a&gt; ，另外一种，是引入 jar 包，在代码中用，参考 &lt;a class=&#34;link&#34; href=&#34;https://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html&lt;/a&gt; ，可以看到他在函数的 Javadoc 上说了&lt;/p&gt;
&lt;p&gt;Use COPY FROM STDIN for very fast copying from an InputStream into a database table.&lt;/p&gt;
&lt;p&gt;这也说明这个工具的作者是很自信的（笑）&lt;/p&gt;
&lt;p&gt;可以看到这个函数有两个重载&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;public long copyIn(String sql,
                   Reader from)
            throws SQLException,
                   IOException
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;和&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;public long copyIn(String sql,
                   InputStream from)
            throws SQLException,
                   IOException
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;那么自然的问题就是，从 Reader 中读取和从 InputStream 中读取有什么区别？&lt;/p&gt;
&lt;p&gt;参考这个文章， &lt;a class=&#34;link&#34; href=&#34;http://blog.sina.com.cn/s/blog_6d3183b50101cri5.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://blog.sina.com.cn/s/blog_6d3183b50101cri5.html&lt;/a&gt; ，其实，二者的主要区别在于：&lt;/p&gt;
&lt;p&gt;InputStream提供的是字节流的读取，而非文本读取，这是和Reader类的根本区别。 即用Reader读取出来的是char数组或者String ，使用InputStream读取出来的是byte数组。&lt;/p&gt;
&lt;p&gt;也就是说，他们一个是面向字节的，一个是面向字符的，而面向字符的自然就要面临一个问题就是字符的编码方式的选择问题，以及解码和编码的开销成本问题，所以从效率上来说，我们应该是选用面向字节的方式&lt;/p&gt;
&lt;p&gt;去看他的源码实现也可以发现&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    public long copyIn(final String sql, InputStream from, int bufferSize) throws SQLException, IOException {
        byte[] buf = new byte[bufferSize];
        int len;
        CopyIn cp = copyIn(sql);
        try {
            while( (len = from.read(buf)) &amp;gt; 0 ) {
                cp.writeToCopy(buf, 0, len);
            }
            return cp.endCopy();
        } finally { // see to it that we do not leave the connection locked
            if(cp.isActive())
                cp.cancelCopy();
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;对于 InputStream 的方式，直接读进来就可以用了&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    public long copyIn(final String sql, Reader from, int bufferSize) throws SQLException, IOException {
        char[] cbuf = new char[bufferSize];
        int len;
        CopyIn cp = copyIn(sql);
        try {
            while ( (len = from.read(cbuf)) &amp;gt; 0) {
                byte[] buf = encoding.encode(new String(cbuf, 0, len));
                cp.writeToCopy(buf, 0, buf.length);
            }
            return cp.endCopy();
        } finally { // see to it that we do not leave the connection locked
            if(cp.isActive())
                cp.cancelCopy();
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;而对于 Reader 的方式，读进来之后还要 encoding 处理一下，进一步验证了我们的想法&lt;/p&gt;
&lt;p&gt;接下来，就可以得出一个使用方式的 demo 代码了，我们的根本需求是把计算结果写入，所以应该是 RDD[T] ，但是，由于需要转成一个 InputStream，所以我们需要转而接受一个 Array[Array[String]] 的入参&lt;/p&gt;
&lt;p&gt;所以到目前为止可以得出代码如下&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  def copyIn(data: Array[Array[String]], tblName: String): Long = {
    var con: Connection = null
    try {      
      Class.forName(&amp;#34;org.postgresql.Driver&amp;#34;)
      println(&amp;#34;connecting to database with url &amp;#34; + url)
      con = DriverManager.getConnection(url, user, password)
      val cm = new CopyManager(con.asInstanceOf[BaseConnection])
      val COPY_CMD = s&amp;#34;COPY $tblName from STDIN&amp;#34;
      val start = System.currentTimeMillis()
      val affectedRowCount = cm.copyIn(COPY_CMD, genInputStream(data))
      val finish = System.currentTimeMillis()
      println(&amp;#34;copy operation completed successfully in &amp;#34; + (finish-start)/1000.0 + &amp;#34; seconds, affectedRowCount &amp;#34; + affectedRowCount)
      con.close()
      affectedRowCount
    } catch {
      case ex: SQLException =&amp;gt; println(&amp;#34;Failed to copy data: &amp;#34; + ex.getMessage()); 0
    } finally {
      try {
        if (con != null) con.close()
      } catch {
        case ex: SQLException =&amp;gt; println(ex.getMessage())
      }
    }
  }
  
  def genInputStream(arr: Array[Array[String]]): InputStream = {    
    val stringBuilder = new StringBuilder
    println(&amp;#34;input data has &amp;#34; + arr.length + &amp;#34; rows&amp;#34;)
    if (arr.length != 0) {
      val rowcount = arr.length;
      val columncount = arr(0).length
      for (i &amp;lt;- 0 to rowcount-1; j &amp;lt;- 0 to columncount-1) {
        stringBuilder.append(arr(i)(j) + (if (j == columncount-1) &amp;#34;\r\n&amp;#34; else &amp;#34;\t&amp;#34;))
      }
    }
    val str = stringBuilder.toString
    println(&amp;#34;input data &amp;#34; + arr.length + &amp;#34; rows total &amp;#34; + str.length + &amp;#34; bytes&amp;#34;)
    new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8))
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以上这个代码能够正常跑出文章开头的性能测试的结果，但是很显然，埋了一个大坑：会爆内存&lt;/p&gt;
&lt;p&gt;且不说为了能够满足 API 的要求，我们需要把输入数据组织成一个 Array[Array[String]] 并拉到 driver 节点（这一步骤本身就违背了 driver 节点不干具体活的宗旨），就说我们把 RDD collect 到 driver 之后，还需要转变出一个 InputStream 这种形式，中途还需要通过 StringBuilder 去 Build 一个大 string，这何止是奢侈，简直就是奢侈，Array[Array[String]] 占一份内存，toString 之后又占一份内存&lt;/p&gt;
&lt;p&gt;于是尝试使用 PipedOutputStream 和 PipedInputStream 来解决，这是一个基于管道的流式读写，我们可以起一个单独的线程，来往这个 PipedOutputStream 写入数据，由于缓冲区大小有限，他就会阻塞在缓冲区满的状态下，然后读取端从 PipedInputStream 去读，一边读一边写入到网络上去，jvm 顿时轻松很多，但是，动手之前，有一个问题是，怎么来确认我们的这些改动是真的有效呢，由此需要引入 java 运行时的内存监控工具&lt;/p&gt;
&lt;p&gt;我们可以发现，在安装 jdk 的时候，附送了这么一个东西&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;//zrj.me/wp-content/uploads/2017/07/1501063231_39_w214_h48.png&#34; &gt;&lt;img src=&#34;https://blog.zrj.me/images/1501063231_39_w214_h48.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;1501063231\_39\_w214\_h48&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;他其实是一个运行时的监控，简单的 CPU 内存监控可以不需要说明书就能上手&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;//zrj.me/wp-content/uploads/2017/07/1501063311_9_w929_h882.png&#34; &gt;&lt;img src=&#34;https://blog.zrj.me/images/1501063311_9_w929_h882.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;1501063311\_9\_w929\_h882&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;他可以绘制出 jvm 运行时的 cpu 和内存曲线图，并带有仪表盘&lt;/p&gt;
&lt;p&gt;另外，我们也通过 runtime 来获取使用的内存，参考这里， &lt;a class=&#34;link&#34; href=&#34;http://viralpatel.net/blogs/getting-jvm-heap-size-used-memory-total-memory-using-java-runtime/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://viralpatel.net/blogs/getting-jvm-heap-size-used-memory-total-memory-using-java-runtime/&lt;/a&gt;  可以加入打印函数如下&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  def printMem(currentMoment: String) {
    println(s&amp;#34;=====$currentMoment=========&amp;#34;)
    val mb = 1024*1024
    val runtime = Runtime.getRuntime()
    println(&amp;#34;Used Memory:&amp;#34; + (runtime.totalMemory() - runtime.freeMemory()) / mb)
    println(&amp;#34;Free Memory:&amp;#34; + runtime.freeMemory() / mb)
    println(&amp;#34;Total Memory:&amp;#34; + runtime.totalMemory() / mb)
    println(&amp;#34;===============&amp;#34;)
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后在原有的函数上打点&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  def genInputStream(arr: Array[Array[String]]): InputStream = {    
    printMem(&amp;#34;before gen string&amp;#34;)
    val stringBuilder = new StringBuilder
    println(&amp;#34;input data has &amp;#34; + arr.length + &amp;#34; rows&amp;#34;)
    if (arr.length != 0) {
      val rowcount = arr.length;
      val columncount = arr(0).length
      for (i &amp;lt;- 0 to rowcount-1; j &amp;lt;- 0 to columncount-1) {
        stringBuilder.append(arr(i)(j) + (if (j == columncount-1) &amp;#34;\r\n&amp;#34; else &amp;#34;\t&amp;#34;))
      }
    }
    val str = stringBuilder.toString
    printMem(&amp;#34;after gen string&amp;#34;)
    println(&amp;#34;input data &amp;#34; + arr.length + &amp;#34; rows total &amp;#34; + str.length + &amp;#34; bytes&amp;#34;)
    new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8))
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;并生成 1kw 行测试数据&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  def main(args: Array[String]): Unit = {
    //var data = Array(Array(&amp;#34;P1&amp;#34;,&amp;#34;PenDrive&amp;#34;,&amp;#34;50&amp;#34;,&amp;#34;US&amp;#34;), Array(&amp;#34;P1&amp;#34;,&amp;#34;PenDrive&amp;#34;,&amp;#34;300&amp;#34;,&amp;#34;US&amp;#34;))
    printMem(&amp;#34;before gen array&amp;#34;)
    val data = Array.fill(100*10000*10)(Array(&amp;#34;P1&amp;#34;,&amp;#34;PenDrive&amp;#34;,&amp;#34;50&amp;#34;,&amp;#34;US&amp;#34;))
    printMem(&amp;#34;after gen array&amp;#34;)
    copyIn(data, &amp;#34;test.product&amp;#34;)
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我们使用一个测试用的表，直接在 eclipse 中跑一下，可以得到输出如下&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=====before gen array=========
Used Memory:3
Free Memory:241
Total Memory:245
===============
=====after gen array=========
Used Memory:345
Free Memory:290
Total Memory:635
===============
=====before gen string=========
Used Memory:352
Free Memory:305
Total Memory:658
===============
input data has 10000000 rows
=====after gen string=========
Used Memory:1989
Free Memory:479
Total Memory:2469
===============
input data 10000000 rows total 190000000 bytes
copy operation completed successfully in 69.951 seconds, affectedRowCount 10000000
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可以看到，通过 stringbuilder 来生成 inputstream 的方式，耗用的内存，远比一倍要多&lt;/p&gt;
&lt;p&gt;那么接下来就可以尝试改成 PipedOutputStream 和 PipedInputStream 的方式了&lt;/p&gt;
&lt;p&gt;把生成 InputStream 的类改成如下&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  def genPipedInputStream(arr: Array[Array[String]]): InputStream = {
    printMem(&amp;#34;before gen inputstream&amp;#34;)
    val out = new PipedOutputStream
    (new Thread(){
      override def run {
        println(&amp;#34;input data has &amp;#34; + arr.length + &amp;#34; rows&amp;#34;)
        if (arr.length != 0) {
          val rowcount = arr.length;
          val columncount = arr(0).length
          for (i &amp;lt;- 0 to rowcount-1; j &amp;lt;- 0 to columncount-1) {
            out.write((arr(i)(j) + (if (j == columncount-1) &amp;#34;\r\n&amp;#34; else &amp;#34;\t&amp;#34;)).getBytes(StandardCharsets.UTF_8))
          }
        }        
        out.close()
        println(&amp;#34;PipedOutputStream closed&amp;#34;)
      }
    }).start()
    val in = new PipedInputStream
    in.connect(out)
    printMem(&amp;#34;after gen inputstream&amp;#34;)
    in    
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;（这里其实隐含了一个问题就是是否需要 CountDownLatch）&lt;/p&gt;
&lt;p&gt;可以看到输出如下，耗时有所增加，不过内存控制住了&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=====before gen array=========
Used Memory:3
Free Memory:241
Total Memory:245
===============
=====after gen array=========
Used Memory:345
Free Memory:295
Total Memory:641
===============
=====before gen inputstream=========
Used Memory:352
Free Memory:288
Total Memory:641
===============
=====after gen inputstream=========
Used Memory:352
Free Memory:286
input data has 10000000 rows
Total Memory:641
===============
PipedOutputStream closed
copy operation completed successfully in 97.917 seconds, affectedRowCount 10000000
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;并且过程中的内存曲线基本平稳&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;//zrj.me/wp-content/uploads/2017/07/1501069503_38_w929_h882.png&#34; &gt;&lt;img src=&#34;https://blog.zrj.me/images/1501069503_38_w929_h882.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;1501069503\_38\_w929\_h882&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;接下来，浮现出来的一个问题就是：是否真的需要把 RDD[T] collect 到 driver 上来？&lt;/p&gt;
&lt;p&gt;答案其实是可以不需要，我们有 mapPartitions 这个算子，可以写成如下&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;val start = System.currentTimeMillis()
dataGpFlatten.mapPartitions(x =&amp;gt; {
  GPCopyMgr.copyIn(x.toArray, &amp;#34;xxxxx&amp;#34;)
  x
}).count
val finish = System.currentTimeMillis()
println(&amp;#34;operation completed successfully in &amp;#34; + (finish-start)/1000.0 + &amp;#34; seconds&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;需要注意的是，mapPartitions 并不是 action，而是一个 transform，所以我们需要在后面给他跟上一个 action，例如 count，来触发执行&lt;/p&gt;
&lt;p&gt;主节点再无写入数据的动作，并且总的耗时比文章开头的耗时还要下降了 5s，不过基本在一个量级，可以认为是实验误差范围内&lt;/p&gt;
&lt;p&gt;通过这种 mapPartitions 的方式，需要注意的问题有&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;partition 数量的选择，过多容易造成同时连接 db 的连接数过多，而且每个分区小了，其实吞吐性能不利&lt;/li&gt;
&lt;li&gt;如果需要 re-partition，需要意识到 re-partition 也是有开销成本的&lt;/li&gt;
&lt;li&gt;最后别忘了跟一个 action&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;至此，基本就完结了，剩下就是一些工程化方面的工作，例如&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在写入数据之前删除分区，以避免脏数据&lt;/li&gt;
&lt;li&gt;在写入数据之后校验写入行数是否相符，以免某个 partition 写的过程中出异常了（这里其实引申出来一个问题，如果某个 executor 在写到一半的时候挂了，怎么办，是否只能整个 lz 任务重跑来清理现场？）&lt;/li&gt;
&lt;li&gt;加强日志的可读性&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上动作都是工程化方面的工作，其实还是避免自己给自己挖坑，哈哈&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;历史评论&#34;&gt;历史评论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;郭祥汝&lt;/strong&gt; (2019-08-24 12:44:03):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;你好，我有两个表，同样是200万行数据，第一张表一条数据不大，第二张表每条数据很大，打一张表copy写入很快，第二张很慢，而且爆出 read and dead错误，请问这是什么问题?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;ZRJ&lt;/strong&gt; (2019-08-29 10:19:15):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个错误我倒是没有遇到过，搜了下貌似也没有什么资料，有详细的上下文和错误提示吗&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;郭祥汝&lt;/strong&gt; (2019-08-30 17:57:23):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那个表中，每一条数据都是那种大文本数据，这种用copy方式写入数据，很慢，也能写入，时间消耗很长，300万条数据，大概消耗7分钟左右。如果表中不包含大文本数据，300万条30多秒，这个差别很大啊，你有没有其他的建议，谢谢！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;ZRJ&lt;/strong&gt; (2019-09-01 11:42:46):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;看下大文本的体积呢，这些大文本每行多少个 byte？同时看下写入时，db 机器的磁盘 IO 和网卡 IO&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;claude&lt;/strong&gt; (2026-03-13 14:42:12):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;好文章，从 JDBC insert 到 COPY 协议，思路清晰，方案选型也很务实。几个点想交流一下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;关于 PipedInputStream/PipedOutputStream 的方案，这个设计本质上是把「数据序列化」和「网络传输」两个阶段从串行变成了流水线并行，用内存换时间的经典思路。不过 PipedStream 在 JVM 中有个已知的坑——默认 buffer 只有 1024 bytes，如果生产端和消费端速率差异大容易触发频繁的 wait/notify，可以考虑在构造时传一个更大的 bufferSize（比如 64KB），或者干脆用 java.nio 的 Pipe.open() 替代，吞吐更好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;你提到的 executor 写到一半挂掉的问题，其实是分布式写入中很经典的 exactly-once 难题。一个可行的工程方案是：每个 partition 先写到一张带 batch_id 的临时表（或者用 GP 的临时表），全部 partition 成功后再做一次 INSERT INTO &amp;hellip; SELECT 或者 ALTER TABLE EXCHANGE PARTITION 来原子性地「翻牌」。这样任何一个 partition 失败都可以安全重试，不用整个任务重跑。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;另外，既然用了 mapPartitions，其实可以更进一步——在 mapPartitions 内部直接构造 PipedOutputStream 往 CopyManager 灌数据，连 Array[Array[String]] 的中间物化都省掉了，iterator 直接流式写入，内存开销可以降到几乎为零。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
