版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、快速掌握Redis性能優(yōu)化目錄 Redis簡介 Redis特性 Redis性能數(shù)據(jù)指標(biāo) 常見性能問題分析 性能優(yōu)化方案 性能測(cè)試Redis簡介 Redis 是一個(gè)開源的高性能Nosql數(shù)據(jù)庫,也是基于內(nèi)存的Key-Value存儲(chǔ)系統(tǒng),可以用作數(shù)據(jù)庫、緩存和消息中間件 支持多種數(shù)據(jù)結(jié)構(gòu):字符串、哈希表、列表、集合、有序集合、位圖、Hyperloglogs 內(nèi)置了復(fù)制,LUA腳本, LRU數(shù)據(jù)淘汰,事務(wù)和不同級(jí)別的磁盤持久化等功能 通過Sentinel哨兵和Cluster自動(dòng)分片集群提供高可用性Redis特性 基于單線程模型實(shí)現(xiàn),一個(gè)線程服務(wù)所有客戶端請(qǐng)求,采用非阻塞式 IO 線程安全,所有操作都
2、是原子的,不會(huì)因并發(fā)產(chǎn)生數(shù)據(jù)異常 速度非???,大部分命令算法時(shí)間復(fù)雜度都是 O(1) 使用高耗時(shí) Redis 命令很危險(xiǎn),會(huì)占用唯一線程的大量處理時(shí)間,導(dǎo)致所有的請(qǐng)求都被拖慢Redis性能數(shù)據(jù)指標(biāo) 通過Redis-cli命令行界面訪問到Redis服務(wù)器,使用info命令獲取豐富的Redis性能數(shù)據(jù)指標(biāo) info命令輸出的數(shù)據(jù)可分為10個(gè)類別,分別是:serverclientsmemorypersistencestatsreplicationcpucommandstatsclusterkeyspace重要性能指標(biāo)memory 輸入info memory命令,只返回與內(nèi)存相關(guān)的數(shù)據(jù) 常用內(nèi)存數(shù)據(jù)指
3、標(biāo)1.used_memory:已使用內(nèi)存2.used_memory_rss:從操作系統(tǒng)上顯示已經(jīng)分配的內(nèi)存總量3.mem_fragmentation_ratio: 內(nèi)存碎片率4.used_memory_lua: Lua腳本引擎所使用的內(nèi)存大小5.mem_allocator: 在編譯時(shí)指定的Redis使用的內(nèi)存分配器,可以是libc、jemalloc、tcmalloc以上指標(biāo)都是以字節(jié)(byte)為單位重要性能指標(biāo)CPU used_cpu_sys:55.09 - Redis服務(wù)器耗費(fèi)的系統(tǒng)CPU used_cpu_user:26.16 - Redis服務(wù)器耗費(fèi)的用戶CPU used_cpu_sy
4、s_children:0.02 -后臺(tái)進(jìn)程耗費(fèi)的系統(tǒng)CPU used_cpu_user_children:0.01 -后臺(tái)進(jìn)程耗費(fèi)的用戶CPU重要性能指標(biāo)Clients記錄了已連接客戶端的信息 connected_clients:1 -已連接客戶端的數(shù)量(不包括通過從屬服務(wù)器連接的客戶端) client_longest_output_list:0 -當(dāng)前連接的客戶端當(dāng)中,最長的輸出列表 client_biggest_input_buf:0 -當(dāng)前連接的客戶端當(dāng)中,最大輸入緩存 blocked_clients:0 -正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客戶端的數(shù)量重
5、要性能指標(biāo)Stats 記錄了一般統(tǒng)計(jì)信息 total_connections_received:782640 -服務(wù)器已接受的連接請(qǐng)求數(shù)量 total_commands_processed:6401614 -服務(wù)器已執(zhí)行的命令數(shù)量 instantaneous_ops_per_sec:7 -服務(wù)器每秒鐘執(zhí)行的命令數(shù)量 latest_fork_usec:475 -最近一次fork() 操作耗費(fèi)的毫秒數(shù)重要性能指標(biāo)Commandstats記錄了各種不同類型的命令的執(zhí)行統(tǒng)計(jì)信息記錄命令執(zhí)行的次數(shù)、命令耗費(fèi)的 CPU 時(shí)間、執(zhí)行每個(gè)命令耗費(fèi)的平均 CPU 時(shí)間等等常見性能問題分析一生產(chǎn)系統(tǒng)剛開始運(yùn)行階段
6、,系統(tǒng)穩(wěn)定。但是運(yùn)行一段時(shí)間后,發(fā)現(xiàn)部分時(shí)間段系統(tǒng)接口響應(yīng)變慢。查看客戶端日志經(jīng)常會(huì)出現(xiàn)這樣的錯(cuò)誤:redis.clients.jedis.exceptions.JedisConnectionException: .SocketTimeoutException: Read timed out執(zhí)行slowlog查看慢查詢語句,發(fā)現(xiàn)有大量的keys命令操作,keys命令在大量并發(fā)情況下性能非常差正式環(huán)境中,盡量避免使用keys,接下來找出使用keys的代碼做優(yōu)化,至此,time out問題解決常見性能問題分析二生產(chǎn)環(huán)境長時(shí)間的運(yùn)行后,經(jīng)常會(huì)有接口返回?cái)?shù)據(jù)失敗的情況,或者是從監(jiān)控上發(fā)現(xiàn)數(shù)據(jù)庫壓力某一
7、時(shí)間暴增。查看客戶端日志發(fā)現(xiàn)這樣的錯(cuò)誤:redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool執(zhí)行client list命令,發(fā)現(xiàn)大量的client的idle時(shí)間特別長檢查配置發(fā)現(xiàn) timeout和tcp-keepalive均未啟用(均為0),redis服務(wù)端沒有有效的機(jī)制來確保服務(wù)端已經(jīng)建立的連接是否已經(jīng)失效當(dāng)服務(wù)器和客戶端網(wǎng)絡(luò)出現(xiàn)閃斷,導(dǎo)致tcp連接中斷,這種情況下的client將會(huì)一直被redis服務(wù)端所持有,就會(huì)出現(xiàn)上idle時(shí)間特長的client連接
8、設(shè)置timeout和tcp-keepalive來清理失效的連接常見性能問題分析三突然間服務(wù)不能訪問,返回錯(cuò)誤:redis.clients.jedis.exceptions.JedisDataException: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the
9、 error.查看redis日志,發(fā)現(xiàn)有這個(gè)錯(cuò)誤:Cant save in background: fork: Cannot allocate memoryRedis在保存內(nèi)存的數(shù)據(jù)到磁盤時(shí),為了防止主進(jìn)程假死,會(huì)Fork一個(gè)子進(jìn)程來完成這個(gè)保存操作,這個(gè)Fork的子進(jìn)程會(huì)需要分配和主進(jìn)程相同的內(nèi)存,這時(shí)候就相當(dāng)于需要的內(nèi)存double了,如果這時(shí)候可用內(nèi)存不足以分配需要的內(nèi)存,將會(huì)導(dǎo)致Fock子進(jìn)程失敗而無法保存數(shù)據(jù)到磁盤。修改linux內(nèi)核參數(shù):vm.overcommit_memory=1,問題解決優(yōu)化措施總結(jié)1.結(jié)合實(shí)際使用場(chǎng)景,考慮是否需要用到redis的持久化,如果單純用來做應(yīng)用層的
10、緩存(在緩存未命中的情況下訪問數(shù)據(jù)庫),可以關(guān)閉持久化2.緩存模式下,盡量為每塊緩存設(shè)置時(shí)效性,避免冷數(shù)據(jù)長時(shí)間占用資源3.生產(chǎn)環(huán)境中盡量避免使用keys操作,由于redis是單線程模式,大量的keys操作會(huì)阻塞其他的命令執(zhí)行4.設(shè)置合理的內(nèi)存回收策略,保證內(nèi)存可用性的同時(shí)能適當(dāng)?shù)奶峁┚彺娴拿新?.提前計(jì)算出系統(tǒng)可能會(huì)用的內(nèi)存大小,合理的分配內(nèi)存。需要注意在開啟持久化模式下,需要預(yù)留更多的內(nèi)存提供給Fock的子進(jìn)程做數(shù)據(jù)磁盤flush操作性能優(yōu)化方案 關(guān)鍵參數(shù)優(yōu)化 長耗時(shí)命令優(yōu)化 延遲因素優(yōu)化 內(nèi)存管理優(yōu)化 操作系統(tǒng)優(yōu)化 讀寫分離機(jī)制 Redis集群關(guān)鍵參數(shù)優(yōu)化 客戶端最大連接數(shù)(maxcl
11、ients) 可能的錯(cuò)誤信息:max number of clients reached 默認(rèn)為0,即不限制,一般不需要更改,所以客戶端連接限制,取決于操作系統(tǒng)參數(shù)ulimit -n(max open files),可通過修改/etc/security/limits.conf文件以永久生效。關(guān)鍵參數(shù)優(yōu)化 主從響應(yīng)策略(repl-ping-slave-period/repl-timeout) slave會(huì)每隔repl-ping-slave-period(默認(rèn)10秒)ping一次master,如果超過repl-timeout(默認(rèn) 60秒)都沒有收到響應(yīng),就會(huì)認(rèn)為Master掛了。如果Master
12、明明沒掛但被阻塞住了也會(huì)報(bào)這個(gè)錯(cuò)??梢赃m當(dāng)調(diào)大repl-timeout關(guān)鍵參數(shù)優(yōu)化 客戶端輸出緩沖區(qū)(client-output-buffer-limit) 當(dāng)使用主從復(fù)制時(shí),性能壓測(cè)下,數(shù)據(jù)量會(huì)急劇增長,導(dǎo)致從節(jié)點(diǎn)需要復(fù)制的數(shù)據(jù)很大,消耗時(shí)長增加。slave沒掛但被阻塞住了,比如正在loading Master發(fā)過來的RDB, Master的指令不能立刻發(fā)送給slave,就會(huì)放在output buffer中,在配置文件中有如下配置:client-output-buffer-limit slave 256mb 64mb 60這是說負(fù)責(zé)發(fā)數(shù)據(jù)給slave的client,如果buffer超過256
13、m或者連續(xù)60秒超過64m,就會(huì)被立刻強(qiáng)行關(guān)閉所以此時(shí)應(yīng)該相應(yīng)調(diào)大數(shù)值,否則就會(huì)出現(xiàn)很悲劇的循環(huán):Master傳輸一個(gè)很大的RDB給Slave,Slave努力地裝載,但還沒裝載完,Master對(duì)client的緩存滿了,再來一次關(guān)鍵參數(shù)優(yōu)化客戶端最大連接數(shù)(maxclients) 限制非預(yù)期的連接數(shù)增長,保持Redis的性能最優(yōu) 應(yīng)設(shè)置為預(yù)期連接數(shù)峰值的110%到150之間,若是連接數(shù)超出這個(gè)數(shù)字后,Redis會(huì)拒絕并立刻關(guān)閉新來的連接 默認(rèn)情況下,盡量不要讓Redis實(shí)例的客戶端連接數(shù)超出5000長耗時(shí)命令優(yōu)化 * 不要把List當(dāng)做列表使用,僅當(dāng)做隊(duì)列來使用 * 通過機(jī)制嚴(yán)格控制Hash、S
14、et、Sorted Set的大小 * 可能的話,將排序、并集、交集等操作放在客戶端執(zhí)行 * 絕對(duì)禁止使用KEYS命令 * 避免一次性遍歷集合類型的所有成員,而應(yīng)使用SCAN類的命令進(jìn)行分批的,游標(biāo)式的遍歷長耗時(shí)命令優(yōu)化Slow Log可以自動(dòng)記錄耗時(shí)較長的命令配置參數(shù): slowlog-log-slower-than xxx #執(zhí)行時(shí)間慢于xxx微秒的命令計(jì)入Slow Log slowlog-max-len xxx #Slow Log的長度,即最大記錄多少條Slow LogSLOWLOG GET number命令,獲取最近進(jìn)入Slow Log的number條命令SLOWLOG RESET命令,
15、重置Slow Log延遲因素優(yōu)化網(wǎng)絡(luò)引發(fā)的延遲 通常千兆網(wǎng)絡(luò)環(huán)境中,TCP/IP網(wǎng)絡(luò)延遲是200us(微秒),Unix域Socket可以低到30us減少網(wǎng)絡(luò)往返時(shí)間RTT(Round-Trip Time),官方優(yōu)化建議:* 長連接:不要頻繁連接/斷開到服務(wù)器的連接,盡可能保持長連接* 域Socket:客戶端與Redis服務(wù)端在同一臺(tái)機(jī)器上,應(yīng)使用Unix域Socket* 多參數(shù)命令:相比管道,優(yōu)先使用多參數(shù)命令,如mset/mget/hmset/hmget等* 管道化:使用管道pipeline將連續(xù)執(zhí)行的命令組合執(zhí)行,減少RTT* LUA腳本:對(duì)于有數(shù)據(jù)依賴而無法使用管道的命令,可以考慮在Re
16、dis服務(wù)端執(zhí)行LUA腳本延遲因素優(yōu)化數(shù)據(jù)淘汰引發(fā)的延遲 當(dāng)同一秒內(nèi)有大量key過期時(shí),會(huì)引發(fā)Redis的延遲,盡量錯(cuò)開key的失效時(shí)間 隨機(jī)化設(shè)置過期時(shí)間,避免同一時(shí)間超過25%的Key過期導(dǎo)致的Redis阻塞Redis剔除過期Key的兩種方式: 被動(dòng):當(dāng)客戶端訪問到Key時(shí),發(fā)現(xiàn)已經(jīng)過期,則剔除 主動(dòng):每100ms剔除一批Key,假如過期Key超過25%則反復(fù)執(zhí)行延遲因素優(yōu)化Swap引發(fā)的延遲當(dāng)Linux將Redis所用的內(nèi)存分頁移至swap空間時(shí),將會(huì)阻塞Redis進(jìn)程,導(dǎo)致Redis出現(xiàn)不正常的延遲/proc/smaps文件中會(huì)保存進(jìn)程的swap記錄,通過查看這個(gè)文件,能夠判斷Redi
17、s的延遲是否由Swap產(chǎn)生。如果這個(gè)文件中記錄了較大的Swap size,則說明延遲很有可能是Swap造成的延遲因素優(yōu)化數(shù)據(jù)持久化引發(fā)的延遲Redis的數(shù)據(jù)持久化工作本身就會(huì)帶來延遲,需要根據(jù)數(shù)據(jù)的安全級(jí)別和性能要求制定合理的持久化策略RDB持久化通常會(huì)提供比使用AOF更高的性能,但每次RDB快照和AOF Rewrite都需要Redis主進(jìn)程進(jìn)行fork操作,fork操作本身可能會(huì)產(chǎn)生較高的耗時(shí)根據(jù)具體情況合理配置RDB快照和AOF Rewrite時(shí)機(jī),避免過于頻繁的fork帶來的延遲可以通過INFO命令返回的latest_fork_usec字段查看上一次fork操作的耗時(shí)(微秒)內(nèi)存管理優(yōu)化
18、內(nèi)存使用率 Redis內(nèi)存使用used_memory超過可用內(nèi)存的95%,部分?jǐn)?shù)據(jù)開始在內(nèi)存與Swap空間來回交換,嚴(yán)重影響性能 如果沒有開啟RDB快照或AOF持久化策略,緩存數(shù)據(jù)在Redis崩潰時(shí)會(huì)有丟失風(fēng)險(xiǎn) 當(dāng)開啟并觸發(fā)快照功能時(shí),Redis會(huì)fork一個(gè)子進(jìn)程把當(dāng)前內(nèi)存中的數(shù)據(jù)完全復(fù)制一份寫入到硬盤上。因此若是當(dāng)前使用內(nèi)存超過可用內(nèi)存的45%時(shí)觸發(fā)快照功能,那么此時(shí)進(jìn)行的內(nèi)存交換會(huì)變的非常危險(xiǎn)(可能會(huì)丟失數(shù)據(jù))。 倘若在這個(gè)時(shí)候?qū)嵗嫌写罅款l繁的更新操作,問題會(huì)變得更加嚴(yán)重內(nèi)存管理優(yōu)化內(nèi)存使用率優(yōu)化 如果緩存數(shù)據(jù)小于4GB,使用32位的Redis實(shí)例 可能的使用Hash數(shù)據(jù)結(jié)構(gòu) 設(shè)置ke
19、y的過期時(shí)間 回收key內(nèi)存管理優(yōu)化內(nèi)存回收策略maxmemory-policy“volatile-lru”:使用LRU算法從已設(shè)置過期時(shí)間的數(shù)據(jù)集合中淘汰數(shù)據(jù)“volatile-ttl”:從已設(shè)置過期時(shí)間的數(shù)據(jù)集合中淘汰即將過期的數(shù)據(jù)“volatile-random”:從已設(shè)置過期時(shí)間的數(shù)據(jù)集合中隨機(jī)淘汰數(shù)據(jù)“allkeys-lru”:使用LRU算法從所有數(shù)據(jù)集合中淘汰數(shù)據(jù)“allkeys-random”:從數(shù)據(jù)集合中任意淘汰數(shù)據(jù)“no-enviction”:禁止淘汰數(shù)據(jù)內(nèi)存管理優(yōu)化內(nèi)存碎片率mem_fragmentation_ratio 由操系統(tǒng)分配的內(nèi)存used_memory_rss除以
20、Redis分配的內(nèi)存used_memory得出 內(nèi)存碎片是由操作系統(tǒng)低效的分配/回收物理內(nèi)存導(dǎo)致的 內(nèi)存碎片率稍大于1是合理的,這個(gè)值表示內(nèi)存碎片率比較低,也說明redis沒有發(fā)生內(nèi)存交換 內(nèi)存碎片率超過1.5,說明Redis消耗了實(shí)際需要物理內(nèi)存的150%,其中50%是內(nèi)存碎片 內(nèi)存碎片率低于1,說明Redis內(nèi)存分配超出了物理內(nèi)存,操作系統(tǒng)正在進(jìn)行內(nèi)存交換內(nèi)存管理優(yōu)化內(nèi)存碎片率優(yōu)化 重啟Redis服務(wù)器內(nèi)存碎片率超過1.5,重啟Redis可讓額外產(chǎn)生的內(nèi)存碎片失效并作為新內(nèi)存使用 限制內(nèi)存交換內(nèi)存碎片率低于1,應(yīng)增加可用物理內(nèi)存或減少Redis實(shí)例內(nèi)存占用 修改內(nèi)存分配器Redis支持gl
21、ibc、jemalloc和tcmalloc等幾種不同的內(nèi)存分配器,每個(gè)分配器在內(nèi)存分配和碎片上都有不同的實(shí)現(xiàn)修改默認(rèn)內(nèi)存分配器,需要完全理解這幾種內(nèi)存分配器的差異,也需重新編譯Redis,不建議普通管理員修改內(nèi)存管理優(yōu)化優(yōu)化總結(jié) 根據(jù)業(yè)務(wù)需要選擇合適的數(shù)據(jù)類型 為不同的應(yīng)用場(chǎng)景設(shè)置相應(yīng)的緊湊存儲(chǔ)參數(shù) 若業(yè)務(wù)場(chǎng)景不需要數(shù)據(jù)持久化,關(guān)閉持久化方式用以提高處理性能及內(nèi)存使用率 如果需要使用持久化,根據(jù)是否可以容忍重啟丟失部分?jǐn)?shù)據(jù)在快照方式與語句追加方式之間選擇其一,不要使用虛擬內(nèi)存或磁盤存儲(chǔ)方式 不要讓Redis所在機(jī)器物理內(nèi)存使用超過實(shí)際內(nèi)存總量的60%操作系統(tǒng)優(yōu)化 內(nèi)存分配控制內(nèi)核參數(shù)vm.ov
22、ercommit_memoryRedis建議把這個(gè)值設(shè)置為1,是為了讓fork能夠在低內(nèi)存下也執(zhí)行成功 swappiness參數(shù)決定操作系統(tǒng)使用swap的傾向程度取值范圍是0100,swappiness的值越大,說明操作系統(tǒng)可能使用swap的概率越高,swappiness值越低,表示操作系統(tǒng)更加傾向于使用物理內(nèi)存設(shè)置方法:echo vm.swappiness=bestvalue /etc/sysctl.conf操作系統(tǒng)優(yōu)化 Transparent Huge Pages支持大內(nèi)存頁(2MB)分配,默認(rèn)開啟,Redis建議禁用,禁用方法:echo never /sys/kernel/mm/transparent_hugepage/enabled OOM killerOOM killer會(huì)在可用內(nèi)存不足時(shí)選擇性的殺掉用戶進(jìn)程對(duì)于Redis服務(wù)器來說,可以將所有Redis的oom_adj設(shè)置為最低值或者稍小的值,降低被OOM killer殺掉的概率操作系統(tǒng)優(yōu)化 NTP時(shí)間同步保證Redis集群時(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度廚房設(shè)備維修保養(yǎng)合作協(xié)議2篇
- 旅游業(yè)務(wù)居間服務(wù)傭金協(xié)議
- 美術(shù)館裝修合同終止
- 2025年單組份PVC扣板膠行業(yè)深度研究分析報(bào)告
- 2024河南塑料加工專用設(shè)備制造市場(chǎng)前景及投資研究報(bào)告
- 2022-2027年中國退燒藥行業(yè)市場(chǎng)深度分析及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 2020-2025年中國高端白酒行業(yè)發(fā)展趨勢(shì)預(yù)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 私人教練馬術(shù)課程免責(zé)協(xié)議書
- 2025年中國超聲波換能器行業(yè)市場(chǎng)調(diào)查研究及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 太陽能光伏發(fā)電系統(tǒng)銷售合同
- 北京市石景山區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 杜邦公司十大安全理念
- 廣聯(lián)達(dá)2024算量軟件操作步驟詳解
- 人教版(2024)七年級(jí)英語上冊(cè)++單詞默寫-艾賓浩斯記憶法-上
- 蘇教版六年級(jí)數(shù)學(xué)下冊(cè)第四單元大單元教學(xué)設(shè)計(jì)
- 北師大版七年級(jí)上冊(cè)數(shù)學(xué)思維導(dǎo)圖全套
- 13《馬說》(原卷版)-2023年中考課標(biāo)文言文20篇專項(xiàng)訓(xùn)練
- Python快速編程入門(第2版)完整全套教學(xué)課件
- 污水處理設(shè)施設(shè)備升級(jí)改造項(xiàng)目資金申請(qǐng)報(bào)告-超長期特別國債投資專項(xiàng)
- 簡易勞務(wù)承包合同范本
- 檢驗(yàn)員績效考核
評(píng)論
0/150
提交評(píng)論