-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
116 lines (116 loc) · 45 KB
/
index.html
File metadata and controls
116 lines (116 loc) · 45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<!doctype html><html lang=en-us><head><meta name=generator content="Hugo 0.145.0"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=robots content="noodp"><title>matteo's blog</title><meta name=Description content="This is my cool site"><meta property="og:url" content="https://matteo-gz.github.io/">
<meta property="og:site_name" content="matteo's blog"><meta property="og:title" content="matteo's blog"><meta property="og:description" content="This is my cool site"><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="matteo's blog"><meta name=twitter:description content="This is my cool site"><meta name=application-name content="My cool site"><meta name=apple-mobile-web-app-title content="My cool site"><meta name=referrer content="no-referrer"><meta name=theme-color content="#ffffff"><meta name=msapplication-TileColor content="#da532c"><link rel="shortcut icon" type=image/x-icon href=/favicon.ico><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon sizes=180x180 href=/apple-touch-icon.png><link rel=mask-icon href=/safari-pinned-tab.svg color=#5bbad5><link rel=manifest href=/site.webmanifest><link rel=canonical href=https://matteo-gz.github.io/><link rel=alternate href=/index.xml type=application/rss+xml title="matteo's blog"><link rel=feed href=/index.xml type=application/rss+xml title="matteo's blog"><link rel=stylesheet href=/css/style.min.css><link rel=preload href=https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.7.2/css/all.min.css as=style onload='this.onload=null,this.rel="stylesheet"'><noscript><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.7.2/css/all.min.css></noscript><link rel=preload href=https://cdn.jsdelivr.net/npm/animate.css@4.1.1/animate.min.css as=style onload='this.onload=null,this.rel="stylesheet"'><noscript><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/animate.css@4.1.1/animate.min.css></noscript><script type=application/ld+json>{"@context":"http://schema.org","@type":"WebSite","url":"https:\/\/matteo-gz.github.io\/","inLanguage":"en-us","author":{"@type":"Person","name":"xxxx"},"description":"This is my cool site","name":"matteo's blog"}</script></head><body data-header-desktop=fixed data-header-mobile=auto><script>const query=window.matchMedia("(prefers-color-scheme: dark)");function applyTheme(){let e=window.localStorage?.getItem("theme")||"auto",t=e==="dark"||e==="auto"&&query.matches;document.body.setAttribute("theme",t?"dark":"light"),document.body.setAttribute("cfg-theme",e)}applyTheme(),query.addEventListener("change",applyTheme)</script><div id=mask></div><div class=wrapper><header class=desktop id=header-desktop><div class=header-wrapper><div class=header-title><a href=/ title="matteo's blog"><img class="lazyload logo" src=/svg/loading.min.svg data-src=/images/Logo_Matteo-100-360x135px.png data-srcset="/images/Logo_Matteo-100-360x135px.png, /images/Logo_Matteo-100-360x135px.png 1.5x, /images/Logo_Matteo-100-360x135px.png 2x" data-sizes=auto alt=/images/Logo_Matteo-100-360x135px.png title=/images/Logo_Matteo-100-360x135px.png>'s blog</a></div><div class=menu><div class=menu-inner><a class=menu-item href=/posts/>Posts </a><a class=menu-item href=/tags/>Tags </a><a class=menu-item href=/categories/>Categories </a><a class=menu-item href=/about/>About </a><a class=menu-item href=/links/>Bookmarks </a><span class="menu-item delimiter"></span><span class="menu-item search" id=search-desktop>
<input type=text placeholder="Search titles or contents..." id=search-input-desktop>
<a href=javascript:void(0); class="search-button search-toggle" id=search-toggle-desktop title=Search><i class="fas fa-search fa-fw" aria-hidden=true></i>
</a><a href=javascript:void(0); class="search-button search-clear" id=search-clear-desktop title=Clear><i class="fas fa-times-circle fa-fw" aria-hidden=true></i>
</a><span class="search-button search-loading" id=search-loading-desktop><i class="fas fa-spinner fa-fw fa-spin" aria-hidden=true></i>
</span></span><a href=javascript:void(0); class="menu-item theme-switch" title="Switch Theme"><i class="fas fa-adjust fa-fw" aria-hidden=true></i></a></div></div></div></header><header class=mobile id=header-mobile><div class=header-container><div class=header-wrapper><div class=header-title><a href=/ title="matteo's blog"><img class="lazyload logo" src=/svg/loading.min.svg data-src=/images/Logo_Matteo-100-360x135px.png data-srcset="/images/Logo_Matteo-100-360x135px.png, /images/Logo_Matteo-100-360x135px.png 1.5x, /images/Logo_Matteo-100-360x135px.png 2x" data-sizes=auto alt=/images/Logo_Matteo-100-360x135px.png title=/images/Logo_Matteo-100-360x135px.png>'s blog</a></div><div class=menu-toggle id=menu-toggle-mobile><span></span><span></span><span></span></div></div><div class=menu id=menu-mobile><div class=search-wrapper><div class="search mobile" id=search-mobile><input type=text placeholder="Search titles or contents..." id=search-input-mobile>
<a href=javascript:void(0); class="search-button search-toggle" id=search-toggle-mobile title=Search><i class="fas fa-search fa-fw" aria-hidden=true></i>
</a><a href=javascript:void(0); class="search-button search-clear" id=search-clear-mobile title=Clear><i class="fas fa-times-circle fa-fw" aria-hidden=true></i>
</a><span class="search-button search-loading" id=search-loading-mobile><i class="fas fa-spinner fa-fw fa-spin" aria-hidden=true></i></span></div><a href=javascript:void(0); class=search-cancel id=search-cancel-mobile>Cancel</a></div><a class=menu-item href=/posts/ title>Posts</a><a class=menu-item href=/tags/ title>Tags</a><a class=menu-item href=/categories/ title>Categories</a><a class=menu-item href=/about/ title>About</a><a class=menu-item href=/links/ title>Bookmarks</a><a href=javascript:void(0); class="menu-item theme-switch" title="Switch Theme">
<i class="fas fa-adjust fa-fw" aria-hidden=true></i></a></div></div></header><div class="search-dropdown desktop"><div id=search-dropdown-desktop></div></div><div class="search-dropdown mobile"><div id=search-dropdown-mobile></div></div><main class=main><div class=container><div class="page home" data-home=posts><div class=home-profile><div class=home-subtitle><div id=id-1 class=typeit></div></div><div class=links></div></div><article class="single summary" itemscope itemtype=http://schema.org/Article><h1 class=single-title itemprop="name headline"><a href=/posts/binsize/>go大小压缩</a></h1><div class=post-meta><span class=post-author><a href=/ title=Author rel=author class=author><i class="fas fa-user-circle fa-fw" aria-hidden=true></i>xxxx</a></span> <span class=post-publish>published on <time datetime=2025-06-22>2025-06-22</time></span></div><div class=content><h2 id=官方自带>官方自带</h2><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>go build -ldflags <span class=s1>'-s -w'</span> </span></span></code></pre></div></div><h2 id=upx-降低>upx 降低</h2><p><a href=https://github.com/upx/upx target=_blank rel="noopener noreffer">https://github.com/upx/upx</a> 要选择最新版本,有优化效果</p><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>upx -9 ./your-bin</span></span></code></pre></div></div><p>这个推荐在服务端使用,客户端不可控(会遇到运行不起来case).</p><h2 id=减少包依赖大小>减少包依赖大小</h2><h3 id=大小分析>大小分析</h3><p><a href=https://github.com/Zxilly/go-size-analyzer target=_blank rel="noopener noreffer">https://github.com/Zxilly/go-size-analyzer</a></p><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl><span class=c1># download</span>
</span></span><span class=line><span class=cl>go install github.com/Zxilly/go-size-analyzer/cmd/gsa@latest
</span></span><span class=line><span class=cl><span class=c1># 分析大小</span>
</span></span><span class=line><span class=cl>gsa --web ./your-bin</span></span></code></pre></div></div><h3 id=依赖分析>依赖分析</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>go mod graph</span></span></code></pre></div></div></div><div class=post-footer><a href=/posts/binsize/>Read More</a></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h1 class=single-title itemprop="name headline"><a href=/posts/clickhouse/>Clickhouse</a></h1><div class=post-meta><span class=post-author><a href=/ title=Author rel=author class=author><i class="fas fa-user-circle fa-fw" aria-hidden=true></i>xxxx</a></span> <span class=post-publish>published on <time datetime=2025-02-09>2025-02-09</time></span></div><div class=content><p>Clickhouse作为一种数据仓库的产品.</p><h2 id=优点>优点</h2><ul><li>文档清晰且有AI问答工具.</li><li>入门难度很低,拥有Mysql的经验即可.</li><li>阿里云也有其产品可以购买,生产稳定,出问题概率低.</li><li>数据压缩,存储成本低.</li><li>索引速度快.</li><li>可以直接录入Mysql作为data source.</li><li>交互协议上支持Http协议,伪Mysql协议和原生高性能协议.</li></ul><h2 id=gui推荐>GUI推荐</h2><p>DataGrip.</p><h2 id=sql操作>SQL操作</h2><p>数据管理利用TTL特性进行数据回收.</p><h3 id=数据分布>数据分布</h3><p>查询</p><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=k>select</span><span class=w> </span><span class=o>*</span><span class=w> </span><span class=k>from</span><span class=w> </span><span class=k>system</span><span class=p>.</span><span class=n>parts</span><span class=w> </span><span class=k>limit</span><span class=w> </span><span class=mi>10</span><span class=p>;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=o>#</span><span class=w> </span><span class=err>目前转移的数据</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=k>select</span><span class=w> </span><span class=o>*</span><span class=w> </span><span class=k>from</span><span class=w> </span><span class=k>system</span><span class=p>.</span><span class=n>mutations</span><span class=p>;</span></span></span></code></pre></div></div><h3 id=计算表大小>计算表大小</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=k>SELECT</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=n>total_bytes</span><span class=o>/</span><span class=n>total_rows</span><span class=p>,</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=k>table</span><span class=p>,</span><span class=k>database</span><span class=p>,</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=n>formatReadableSize</span><span class=p>(</span><span class=n>total_bytes</span><span class=p>)</span><span class=w> </span><span class=k>AS</span><span class=w> </span><span class=n>total_bytes_on_disk</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=k>FROM</span><span class=w> </span><span class=k>system</span><span class=p>.</span><span class=n>tables</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=k>WHERE</span><span class=w> </span><span class=k>table</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=s1>'table'</span><span class=p>;</span></span></span></code></pre></div></div><h3 id=表转移>表转移</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=k>RENAME</span><span class=w> </span><span class=k>TABLE</span><span class=w> </span><span class=k>database</span><span class=p>.</span><span class=n>exist_table</span><span class=w> </span><span class=k>TO</span><span class=w> </span><span class=k>database</span><span class=p>.</span><span class=n>old_table</span><span class=p>,</span><span class=w> </span><span class=k>database</span><span class=p>.</span><span class=n>new_table</span><span class=w> </span><span class=k>TO</span><span class=w> </span><span class=k>database</span><span class=p>.</span><span class=n>exist_table</span><span class=p>;</span></span></span></code></pre></div></div><h3 id=数据回收>数据回收</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=k>ALTER</span><span class=w> </span><span class=k>TABLE</span><span class=w> </span><span class=k>database</span><span class=p>.</span><span class=k>table</span><span class=w> </span><span class=k>DROP</span><span class=w> </span><span class=n>PARTITION</span><span class=w> </span><span class=s1>'20240925'</span><span class=p>;</span></span></span></code></pre></div></div><h3 id=修改ttl>修改TTL</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=k>ALTER</span><span class=w> </span><span class=k>TABLE</span><span class=w> </span><span class=k>database</span><span class=p>.</span><span class=k>table</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=k>MODIFY</span><span class=w> </span><span class=n>TTL</span><span class=w> </span><span class=k>timestamp</span><span class=w> </span><span class=o>+</span><span class=w> </span><span class=n>toIntervalMonth</span><span class=p>(</span><span class=mi>2</span><span class=p>);</span></span></span></code></pre></div></div><h3 id=查看表结构>查看表结构</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=k>SELECT</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=n>name</span><span class=w> </span><span class=k>AS</span><span class=w> </span><span class=n>field_name</span><span class=p>,</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=k>table</span><span class=w> </span><span class=k>AS</span><span class=w> </span><span class=k>table_name</span><span class=p>,</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=k>type</span><span class=w> </span><span class=k>AS</span><span class=w> </span><span class=n>field_type</span><span class=p>,</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=k>comment</span><span class=w> </span><span class=k>AS</span><span class=w> </span><span class=n>field_comment</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=k>FROM</span><span class=w> </span><span class=k>system</span><span class=p>.</span><span class=n>columns</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=k>WHERE</span><span class=w> </span><span class=k>database</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=s1>'database'</span><span class=w> </span><span class=k>AND</span><span class=w> </span><span class=k>table</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=s1>'table'</span><span class=p>;</span></span></span></code></pre></div></div><h2 id=常用函数>常用函数</h2><h3 id=易读数量>易读数量</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=n>formatReadableQuantity</span><span class=p>(</span><span class=k>count</span><span class=p>())</span></span></span></code></pre></div></div><h3 id=时间切割>时间切割</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=n>toStartOfInterval</span><span class=p>(</span><span class=n>toDateTime</span><span class=p>(</span><span class=k>timestamp</span><span class=p>),</span><span class=w> </span><span class=nb>INTERVAL</span><span class=w> </span><span class=mi>1</span><span class=w> </span><span class=k>day</span><span class=w> </span><span class=p>)</span><span class=w> </span><span class=k>as</span><span class=w> </span><span class=n>interval1</span></span></span></code></pre></div></div><h3 id=截取数据>截取数据</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=k>substring</span><span class=p>(</span><span class=n>message</span><span class=p>,</span><span class=w> </span><span class=o>-</span><span class=mi>20</span><span class=p>)</span><span class=w> </span></span></span></code></pre></div></div><h3 id=数据类型转换>数据类型转换</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=n>toString</span></span></span></code></pre></div></div><h3 id=数据拼接>数据拼接</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=n>concat</span><span class=p>(</span><span class=n>a</span><span class=p>,</span><span class=s1>''</span><span class=p>,</span><span class=n>toString</span><span class=p>(</span><span class=n>b</span><span class=p>))</span></span></span></code></pre></div></div><h2 id=clickhouse-同步mysql数据>clickhouse 同步mysql数据</h2><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=k>SET</span><span class=w> </span><span class=n>allow_experimental_database_materialized_mysql</span><span class=o>=</span><span class=mi>1</span><span class=p>;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=k>CREATE</span><span class=w> </span><span class=k>DATABASE</span><span class=w> </span><span class=n>new_database</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=n>ENGINE</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>MaterializedMySQL</span><span class=p>(</span><span class=s1>'host:3306'</span><span class=p>,</span><span class=s1>'database'</span><span class=p>,</span><span class=w> </span><span class=s1>'user'</span><span class=p>,</span><span class=w> </span><span class=s1>'password'</span><span class=p>)</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=n>SETTINGS</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=n>allows_query_when_mysql_lost</span><span class=o>=</span><span class=k>true</span><span class=p>,</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=n>max_wait_time_when_mysql_unavailable</span><span class=o>=</span><span class=mi>10000</span><span class=p>;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=c1>-- drop database new_database;</span></span></span></code></pre></div></div><h3 id=mysql-服务端>mysql 服务端</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-sql"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-sql data-lang=sql><span class=line><span class=cl><span class=n>default_authentication_plugin</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>mysql_native_password</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=n>gtid_mode</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>on</span></span></span></code></pre></div></div><h3 id=mysql-表条件>mysql 表条件</h3><p>MySQL中的每个表都应包含PRIMARY KEY,并且如果表中包含ENUM字段值超出范围(在ENUM签名中指定),则无法进行复制。</p></div><div class=post-footer><a href=/posts/clickhouse/>Read More</a></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h1 class=single-title itemprop="name headline"><a href=/posts/memprofiling/>Go 内存泄漏排查</a></h1><div class=post-meta><span class=post-author><a href=/ title=Author rel=author class=author><i class="fas fa-user-circle fa-fw" aria-hidden=true></i>xxxx</a></span> <span class=post-publish>published on <time datetime=2024-08-14>2024-08-14</time></span></div><div class=content><h2 id=背景>背景</h2><p>某次发版后,生产机器的内存相比之前相同负载条件下使用率高,业务无异常影响.
而后带来的影响是,数据库连接资源随着pod数量提升占用提高.</p><h3 id=间接处理>间接处理</h3><ul><li>回滚版本</li><li>每隔固定时间定时重新发版</li><li>把所有依赖pkg升级至最新,把Go版本升级至最新</li><li>服务拆分,让业务链路保持简单.</li></ul><h3 id=直接处理>直接处理</h3><ul><li>排查内存泄漏与修复</li></ul><h3 id=思路>思路</h3><h4 id=复现生产环境场景>复现生产环境场景</h4><p>在测试环境里,对比此次版本的功能改动点进行压测,难以压测的直接for循环将变动函数调用增加10倍来调试或者将time.ticker的频率放大10倍.</p><h4 id=使用pyroscope分析>使用pyroscope分析</h4><p>pyroscope <a href=https://pyroscope.io/ target=_blank rel="noopener noreffer">https://pyroscope.io/</a> 是基于golang的<code>pprof</code>工具进行采集.</p><h4 id=使用pprof>使用pprof</h4><p>go官方自带的工具 <a href=https://github.com/google/pprof target=_blank rel="noopener noreffer">https://github.com/google/pprof</a></p><h4 id=使用perf>使用perf</h4><p>perf是个经典的分析工具, <a href=https://github.com/google/perf_data_converter target=_blank rel="noopener noreffer">https://github.com/google/perf_data_converter</a> 可以将<code>perf</code>的分析报告转化为<code>pprof</code>的格式进行分析</p><h2 id=pprof着手分析>pprof着手分析</h2><h3 id=下载heap分析文件>下载heap分析文件</h3><p>接入pprof后,可用<code>curl</code>下载分析文件 <code>curl -o heapfile http://localhost/debug/pprof/heap?seconds=30</code> .
上述命令可捕获30秒的堆文件分析.</p><h3 id=查看pprof官方自带文档>查看pprof官方自带文档</h3><p>关于pprof的使用说明,请务必看完 <a href=https://github.com/google/pprof/blob/main/doc/README.md target=_blank rel="noopener noreffer">https://github.com/google/pprof/blob/main/doc/README.md</a>
该文讲述了</p><ul><li>pprof字段 <code>flat</code> <code>cum</code> 代表的含义.</li><li>可通过web的方式进行UI交互或者cli方式交互. <code>go tool pprof -http :8810 heapfile</code></li><li>调用图里面的颜色,矩形大小,矩形边缘粗细,虚线箭头和实线箭头的含义解释</li><li>可对比2个时间段的pprof文件,<code>go tool pprof --base base.heap current.heap</code></li></ul><h3 id=内存采样率控制>内存采样率控制</h3><p><a href=https://github.com/golang/go/blob/release-branch.go1.23/src/runtime/mprof.go#L938 target=_blank rel="noopener noreffer">runtime.MemProfileRate</a> 采样率控制.</p><p>假设runtime.MemProfileRate=N,那么采样为1/N进行.如果觉得采样率小了,可以在测试环境进行调整.</p><h3 id=空闲-heap>空闲 Heap</h3><p><a href="http://localhost/debug/pprof/heap?debug=1" target=_blank rel="noopener noreffer">http://localhost/debug/pprof/heap?debug=1</a> 有个<code>HeapIdle</code>指标.</p></div><div class=post-footer><a href=/posts/memprofiling/>Read More</a></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h1 class=single-title itemprop="name headline"><a href=/posts/press_linux/>linux压测配置优化</a></h1><div class=post-meta><span class=post-author><a href=/ title=Author rel=author class=author><i class="fas fa-user-circle fa-fw" aria-hidden=true></i>xxxx</a></span> <span class=post-publish>published on <time datetime=2024-05-29>2024-05-29</time></span></div><div class=content><h2 id=背景>背景</h2><p>临时租赁服务器,进行灰度压测,进行大量并发cURL.测试机器压榨单机极限性能.</p><h2 id=修改单进程句柄限制>修改单进程句柄限制</h2><h3 id=查看进程最大文件数>查看进程最大文件数</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl><span class=c1># 查看进程最大文件数</span>
</span></span><span class=line><span class=cl><span class=nb>ulimit</span> -n</span></span></code></pre></div></div><h3 id=修改进程最大文件数>修改进程最大文件数</h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl><span class=nb>ulimit</span> -SHn <span class=m>1048576</span></span></span></code></pre></div></div><ul><li>S 表示设置软限制(soft limit)。软限制是指系统允许进程使用的资源上限,但进程可以尝试超过这个限制。</li><li>H 表示设置硬限制(hard limit)。硬限制是指系统绝对允许进程使用的资源上限,即使进程尝试超过这个限制,系统也会阻止它。</li><li>n 表示设置进程可以打开的文件描述符的最大数量</li></ul><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl><span class=c1># 防止重启后失效</span>
</span></span><span class=line><span class=cl><span class=nb>echo</span> <span class=nb>ulimit</span> -HSn <span class=m>1048576</span> >> /etc/rc.local
</span></span><span class=line><span class=cl><span class=nb>echo</span> <span class=nb>ulimit</span> -HSn <span class=m>1048576</span> >>/root/.bash_profile</span></span></code></pre></div></div><h3 id=ulimit影响因素>ulimit影响因素</h3><ul><li><code>fs.nr_open</code>;进程最大文件描述符数</li><li><code>fs.file-max</code>;系统最大文件描述符数</li></ul><h3 id=修改etcsysctlconf>修改<code>/etc/sysctl.conf</code></h3><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl><span class=c1># /etc/sysctl.conf</span>
</span></span><span class=line><span class=cl>fs.file-max <span class=o>=</span> <span class=m>1048576</span>
</span></span><span class=line><span class=cl>fs.nr_open<span class=o>=</span><span class=m>1048576</span></span></span></code></pre></div></div><h2 id=nf_conntrack_max-开启>nf_conntrack_max 开启</h2><p>防止配置<code>net.nf_conntrack_max</code>报错</p></div><div class=post-footer><a href=/posts/press_linux/>Read More</a></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h1 class=single-title itemprop="name headline"><a href=/posts/linux_debug/>linux排查</a></h1><div class=post-meta><span class=post-author><a href=/ title=Author rel=author class=author><i class="fas fa-user-circle fa-fw" aria-hidden=true></i>xxxx</a></span> <span class=post-publish>published on <time datetime=2024-05-25>2024-05-25</time></span></div><div class=content><blockquote><p>Linux性能优化实战 笔记
<a href=https://time.geekbang.org/column/intro/100020901 target=_blank rel="noopener noreffer">https://time.geekbang.org/column/intro/100020901</a></p></blockquote><h2 id=模拟工具>模拟工具</h2><h3 id=stress>stress</h3><blockquote><p>stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景</p></blockquote><p><code>apk add stress-ng</code></p><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl><span class=c1># 一个 CPU 使用率 100%</span>
</span></span><span class=line><span class=cl>stress --cpu <span class=m>1</span> --timeout <span class=m>600</span></span></span></code></pre></div></div><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl><span class=c1># 模拟 I/O 压力</span>
</span></span><span class=line><span class=cl>stress -i <span class=m>1</span> --timeout <span class=m>600</span></span></span></code></pre></div></div><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl><span class=c1># 8个进程</span>
</span></span><span class=line><span class=cl> stress -c <span class=m>8</span> --timeout <span class=m>600</span></span></span></code></pre></div></div><h3 id=sysbench>sysbench</h3><blockquote><p>sysbench 是一个多线程的基准测试工具,一般用来评估不同系统参数下的数据库负载情况</p></div><div class=post-footer><a href=/posts/linux_debug/>Read More</a></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h1 class=single-title itemprop="name headline"><a href=/posts/supervisor/>supervisor搭建</a></h1><div class=post-meta><span class=post-author><a href=/ title=Author rel=author class=author><i class="fas fa-user-circle fa-fw" aria-hidden=true></i>xxxx</a></span> <span class=post-publish>published on <time datetime=2024-05-23>2024-05-23</time></span></div><div class=content><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><pre tabindex=0><code># 下载
pip install supervisor
# 初始化配置
echo_supervisord_conf > /etc/supervisord.conf</code></pre></div><p>vim <code>/etc/supervisord.conf</code> append</p><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><pre tabindex=0><code>[program:process1]
command=/root/process1
autorestart=true</code></pre></div><div class="code-block code-line-numbers open" style="counter-reset:code-block 0"><div class="code-header language-shell"><span class=code-title><i class="arrow fas fa-angle-right fa-fw" aria-hidden=true></i></span>
<span class=ellipses><i class="fas fa-ellipsis-h fa-fw" aria-hidden=true></i></span>
<span class=copy title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden=true></i></span></div><div class=highlight><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl><span class=c1># 载入服务</span>
</span></span><span class=line><span class=cl>supervisord -c /etc/supervisord.conf
</span></span><span class=line><span class=cl><span class=c1># 启动</span>
</span></span><span class=line><span class=cl>supervisorctl start process1
</span></span><span class=line><span class=cl><span class=c1># 停止</span>
</span></span><span class=line><span class=cl>supervisorctl stop process1
</span></span><span class=line><span class=cl><span class=c1># 更新了 /etc/supervisord.conf后</span>
</span></span><span class=line><span class=cl>supervisorctl reload</span></span></code></pre></div></div></div><div class=post-footer><a href=/posts/supervisor/>Read More</a></div></article><ul class=pagination><li class="page-item active"><span class=page-link><a href=/>1</a></span></li><li class=page-item><span class=page-link><a href=/page/2/>2</a></span></li><li class=page-item><span class=page-link><a href=/page/3/>3</a></span></li><li class=page-item><span class=page-link aria-hidden=true>…</span></li><li class=page-item><span class=page-link><a href=/page/5/>5</a></span></li></ul></div></div></main><footer class=footer><div class=footer-container><div class=footer-line>Powered by <a href=https://gohugo.io/ target=_blank rel="noopener noreffer" title="Hugo 0.145.0">Hugo</a> | Theme - <a href=https://github.com/dillonzq/LoveIt target=_blank rel="noopener noreffer" title="LoveIt 0.3.1-DEV"><i class="far fa-kiss-wink-heart fa-fw" aria-hidden=true></i> LoveIt</a></div><div class=footer-line itemscope itemtype=http://schema.org/CreativeWork><i class="far fa-copyright fa-fw" aria-hidden=true></i><span itemprop=copyrightYear>2022 - 2025</span><span class=author itemprop=copyrightHolder> <a href=/ target=_blank>xxxx</a></span></div></div></footer></div><div id=fixed-buttons><a href=# id=back-to-top class=fixed-button title="Back to Top"><i class="fas fa-arrow-up fa-fw" aria-hidden=true></i></a></div><div id=fixed-buttons-hidden><a href=# id=view-comments class=fixed-button title="View Comments"><i class="fas fa-comment fa-fw" aria-hidden=true></i></a></div><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.css><script src=https://cdn.jsdelivr.net/npm/autocomplete.js@0.38.1/dist/autocomplete.min.js></script><script src=https://cdn.jsdelivr.net/npm/algoliasearch@5.20.2/dist/lite/builds/browser.umd.min.js></script><script src=https://cdn.jsdelivr.net/npm/lazysizes@5.3.2/lazysizes.min.js></script><script src=https://cdn.jsdelivr.net/npm/clipboard@2.0.11/dist/clipboard.min.js></script><script src=https://cdn.jsdelivr.net/npm/sharer.js@0.5.2/sharer.min.js></script><script src=https://cdn.jsdelivr.net/npm/typeit@8.6.0/dist/index.umd.js></script><script src=https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.js></script><script src=https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/contrib/auto-render.min.js></script><script src=https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/contrib/copy-tex.min.js></script><script src=https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/contrib/mhchem.min.js></script><script>window.config={data:{"id-1":"This is my cool site"},math:{delimiters:[{display:!0,left:"$$",right:"$$"},{display:!0,left:"\\[",right:"\\]"},{display:!0,left:"\\begin{equation}",right:"\\end{equation}"},{display:!0,left:"\\begin{equation*}",right:"\\end{equation*}"},{display:!0,left:"\\begin{align}",right:"\\end{align}"},{display:!0,left:"\\begin{align*}",right:"\\end{align*}"},{display:!0,left:"\\begin{alignat}",right:"\\end{alignat}"},{display:!0,left:"\\begin{alignat*}",right:"\\end{alignat*}"},{display:!0,left:"\\begin{gather}",right:"\\end{gather}"},{display:!0,left:"\\begin{CD}",right:"\\end{CD}"},{display:!1,left:"$",right:"$"},{display:!1,left:"\\(",right:"\\)"}],strict:!1},search:{algoliaAppID:"I3HV4LCBLW",algoliaIndex:"index",algoliaSearchKey:"e4b3657230aec6057242154527513ef1",highlightTag:"em",maxResultLength:10,noResultsFound:"No results found",snippetLength:30,type:"algolia"},typeit:{cursorChar:"|",cursorSpeed:1e3,data:{"id-1":["id-1"]},duration:-1,speed:100}}</script><script src=/js/theme.min.js></script></body></html>