SlideShare a Scribd company logo
1 of 48
チューニンガソン5の復讐
~SH2さんの宿題をやってみた~
2013/07/29
MyNA July in 2013
yoku0825
SH2さんのブログ記事
チューニンガソン5の復習
MySQL 5.5 チート編&勉強会のお知らせ
http://d.hatena.ne.jp/sh2/20130304
に敬意を表して
\こんばんは/
• I'm yoku0825, working as DBA for the
company which provides web-services.
• Husband of my wife :)
• Father of my son :)
• I love sushi more than yakiniku :)
Of cource, I love yakiniku well.
• MySQL? It's my delight :)
今日のテーマ
• LTなので、チューニンガソン5の説明は省
略します。
– レギュレーションとかはゼロスタートさんの
広報ブログを
http://pr.zero-start.jp/archives/65730135.html
• 今回のチューニングはSH2さんのブログ記
事がベースです。
– http://d.hatena.ne.jp/sh2/20130304
SH2さんのチューニング(?)
やってみましょう
握 り つ ぶ し て い ま
す
同じ文字列を返すようにできます
まあなんというか
( ´-`).oO(MySQL Proxyでクエリ
書き換えはいくらなんでもあん
まりだろう
と思ったのは俺だけではないはず
そんなアナタに贈る
MySQL Proxyを使わずに
mysqldを改造して
クエリキャッシュに載せるライフ
ハック
Let's 魔改造
用意したもの
• CentOS 6.3の仮想マシン。
– 1vCPU
– 1GiB Memory
– 230IOPSしかでなかった仮想DISK
• MySQL 5.6.12 Source-Distributed
• 男らしい潔さと大胆さ。
• 後ろを振り返らない勇ましさ。
• 最後は初心に返る謙虚さ。
まずは吊るしのスコアを測定
$ python tgbench_mysql_2.py localhost
Q0:0.00024
Q1:31.04855
Q2:21.24284
Q3:20.81227
Q4:81.48403
Q5:77.68560
Total:232.27354
$ python tgbench_mysql_2.py localhost
Q0:0.00034
Q1:19.70425
Q2:19.93358
Q3:20.23704
Q4:76.66882
Q5:76.79747
Total:213.34149
うわっ…私のMySQL、遅すぎ
…?
My MySQL is slower than your MySQL :(
まあ、行きます。
まずはRESET QUERY CACHEを何とかしようず。
RESET QUERY CACHEの回避
• RESET QUERY CACHEを処理する関数は
Query_cache::flush()
2063 /* Remove all queries from cache */
2064
2065 void Query_cache::flush()
2066 {
2067 DBUG_ENTER("Query_cache::flush");
2068 if (is_disabled())
2069 DBUG_VOID_RETURN;
2070
2071 QC_DEBUG_SYNC("wait_in_query_cache_flush1");
2072
2073 lock_and_suspend();
2074 if (query_cache_size > 0)
2075 {
2076 DUMP(this);
2077 flush_cache();
2078 DUMP(this);
2079 }
2080
2081 DBUG_EXECUTE("check_querycache",query_cache.check_integrity(1););
2082 unlock();
2083 DBUG_VOID_RETURN;
2084 }
RESET QUERY CACHEの回避
• 男らしい潔さと大胆さを発揮。
***************
*** 2064,2085 ****
void Query_cache::flush()
{
- DBUG_ENTER("Query_cache::flush");
- if (is_disabled())
- DBUG_VOID_RETURN;
-
- QC_DEBUG_SYNC("wait_in_query_cache_flush1");
-
- lock_and_suspend();
- if (query_cache_size > 0)
- {
- DUMP(this);
- flush_cache();
- DUMP(this);
- }
-
- DBUG_EXECUTE("check_querycache",query_cache.check_integrity(1););
- unlock();
DBUG_VOID_RETURN;
}
--- 2064,2069 ----
Q3, Q4, Q5がクエリキャッシュから返るよう
に
$ python tgbench_mysql_2.py localhost
Q0:0.00024
Q1:27.84138
Q2:20.36092
Q3:20.98092
Q4:81.70963
Q5:75.44204
Total:226.33513
$ python tgbench_mysql_2.py localhost
Q0:0.00019
Q1:20.24178
Q2:20.76213
Q3:0.00057
Q4:0.11970
Q5:0.00879
Total:41.13317
はい次。
NOW()関数を何とかしようず。
NOW()関数の回避
• クエリーがクエリーキャッシュにのるべ
きか否かを判定するのは
Query_cache::is_cacheable
3702 TABLE_COUNTER_TYPE
3703 Query_cache::is_cacheable(THD *thd, size_t query_len, const char *query,
3704 LEX *lex,
3705 TABLE_LIST *tables_used, uint8 *tables_type)
3706 {
3707 TABLE_COUNTER_TYPE table_count;
3708 DBUG_ENTER("Query_cache::is_cacheable");
3709
3710 if (query_cache_is_cacheable_query(lex) &&
3711 (thd->variables.query_cache_type == 1 ||
3712 (thd->variables.query_cache_type == 2 && (lex->select_lex.options &
3713 OPTION_TO_QUERY_CACHE))))
3714 {
..
3720 if (!(table_count= process_and_count_tables(thd, tables_used,
3721 tables_type)))
3722 DBUG_RETURN(0);
3723
3724 if (thd->in_multi_stmt_transaction_mode() &&
3725 ((*tables_type)&HA_CACHE_TBL_TRANSACT))
3726 {
3727 DBUG_PRINT("qcache", ("not in autocommin mode"));
3728 DBUG_RETURN(0);
3729 }
3730 DBUG_PRINT("qcache", ("select is using %d tables", table_count));
NOW()関数の回避
• 本当はNOW()だけ華麗にスルーしたかった
けど、手が込みそうなので後ろを振り返
らない勇ましさを発揮。
***************
*** 3707,3716 ****
TABLE_COUNTER_TYPE table_count;
DBUG_ENTER("Query_cache::is_cacheable");
! if (query_cache_is_cacheable_query(lex) &&
! (thd->variables.query_cache_type == 1 ||
(thd->variables.query_cache_type == 2 && (lex->select_lex.options &
! OPTION_TO_QUERY_CACHE))))
{
DBUG_PRINT("qcache", ("options: %lx %lx type: %u",
(long) OPTION_TO_QUERY_CACHE,
--- 3691,3699 ----
TABLE_COUNTER_TYPE table_count;
DBUG_ENTER("Query_cache::is_cacheable");
! if (thd->variables.query_cache_type == 1 ||
(thd->variables.query_cache_type == 2 && (lex->select_lex.options &
! OPTION_TO_QUERY_CACHE)))
{
DBUG_PRINT("qcache", ("options: %lx %lx type: %u",
(long) OPTION_TO_QUERY_CACHE,
Q2もクエリキャッシュから返るように
$ python tgbench_mysql_2.py localhost
Q0:0.00030
Q1:32.63952
Q2:21.20478
Q3:21.08606
Q4:82.93199
Q5:78.23889
Total:236.10153
$ python tgbench_mysql_2.py localhost
Q0:0.00021
Q1:20.41031
Q2:0.00031
Q3:0.00014
Q4:0.11961
Q5:0.00984
Total:20.54041
はい次。
AUTOCOMMITを何とかしようず。
AUTOCOMMITの壁
• Bug #42197の壁
http://bugs.mysql.com/bug.php?id=42197
• 正直色々無理。
• 俺が直せるならとっくに直ってるだろ。
• vioでautocommitフラグを握りつぶそうかと
思ったけど、sql/sql_cache.ccの中で完結した
かった。
• トランザクション周りの判定を色々変えてみ
るも、そもそもmy_hash_searchで転んでるの
でダメぽ。
結局
謙虚に初心に返ってみた
• ALTER TABLE page Engine = MyISAM;
• ALTER TABLE revision Engine = MyISAM;
'`,、'`,、( ´∀`)'`,、'`,、
これで全てがクエリキャッシュから返る
$ python tgbench_mysql_2.py localhost
Q0:0.00031
Q1:3.44232
Q2:2.98533
Q3:2.97978
Q4:29.55061
Q5:25.79326
Total:64.75160
$ python tgbench_mysql_2.py localhost
Q0:0.00018
Q1:0.00016
Q2:0.00010
Q3:0.00033
Q4:0.11568
Q5:0.00785
Total:0.12431
副作用
$ time mysql -e "SELECT rev_id FROM wikipedia.revision ORDER BY RAND() LIMIT 5"
+----------+
| rev_id |
+----------+
| 43292141 |
| 35737287 |
| 45015288 |
| 39406805 |
| 44899598 |
+----------+
real 0m4.259s
user 0m0.006s
sys 0m0.004s
$ time mysql -e "SELECT rev_id FROM wikipedia.revision ORDER BY RAND() LIMIT 5"
+----------+
| rev_id |
+----------+
| 43292141 |
| 35737287 |
| 45015288 |
| 39406805 |
| 44899598 |
+----------+
real 0m0.027s
user 0m0.005s
sys 0m0.005s
ORDER BY RAND()でもクエリ
キャッシュから返るからDISKに優
しい!
orz
副作用
$ time mysql -e "SELECT rev_id, NOW() FROM wikipedia.revision LIMIT 5"
+---------+---------------------+
| rev_id | NOW() |
+---------+---------------------+
| 647678 | 2013-07-08 11:50:14 |
| 2168855 | 2013-07-08 11:50:14 |
| 2168856 | 2013-07-08 11:50:14 |
| 2168894 | 2013-07-08 11:50:14 |
| 2168972 | 2013-07-08 11:50:14 |
+---------+---------------------+
real 0m0.031s
user 0m0.007s
sys 0m0.003s
$ time mysql -e "SELECT rev_id, NOW() FROM wikipedia.revision LIMIT 5"
+---------+---------------------+
| rev_id | NOW() |
+---------+---------------------+
| 647678 | 2013-07-08 11:50:14 |
| 2168855 | 2013-07-08 11:50:14 |
| 2168856 | 2013-07-08 11:50:14 |
| 2168894 | 2013-07-08 11:50:14 |
| 2168972 | 2013-07-08 11:50:14 |
+---------+---------------------+
real 0m0.011s
user 0m0.005s
sys 0m0.004s
まるでREPEATABLE-READ!!
orz
日本よ、これがMySQL 5.6
だッ!!
(c) @nippondanji
http://nippondanji.blogspot.jp/2012/
10/mysql-56.html
すいません調子乗りましたorz
今回の魔改造の副産物
というか、魔改造が副産物だけど
information_schema.QUERY_CACHE_INFO
• MariaDB 10.0.2, 5.5.31にもバックポートさ
れた、クエリーキャッシュの中身を覗け
るinformation_schemaプラグイン
• 自力で書こうと頑張っていた頃に見つけ
て見事にやる気をなくす
• が、折角だからMySQLでも使えるように
パッチした
• 取り敢えずステージング環境に突っ込ん
で使ってる
こんな感じ
mysql55> SELECT * FROM information_schema.query_cache_info LIMIT 3G
*************************** 1. row ***************************
STATEMENT_SCHEMA: tpcc
STATEMENT_TEXT: SELECT i_price, i_name, i_data FROM item WHERE i_id = 16360
RESULT_BLOCKS_COUNT: 1
RESULT_BLOCKS_SIZE: 512
RESULT_BLOCKS_SIZE_USED: 298
*************************** 2. row ***************************
STATEMENT_SCHEMA: tpcc
STATEMENT_TEXT: SELECT i_price, i_name, i_data FROM item WHERE i_id = 39901
RESULT_BLOCKS_COUNT: 1
RESULT_BLOCKS_SIZE: 512
RESULT_BLOCKS_SIZE_USED: 297
*************************** 3. row ***************************
STATEMENT_SCHEMA: tpcc
STATEMENT_TEXT: SELECT i_price, i_name, i_data FROM item WHERE i_id = 2134
RESULT_BLOCKS_COUNT: 1
RESULT_BLOCKS_SIZE: 512
RESULT_BLOCKS_SIZE_USED: 302
3 rows in set (0.01 sec)
パッチはこちら
https://github.com/yoku0825/qc_info
MariaDBのJIRAに
インプリメントのパッチがあるので
そのうち追加するかも
あと5.6で動かないのでそれも
MySQL 5.6ではデフォルトでoffに
なりましたが
しかも(for performance reasons)って
中の人に書かれてたり。
知ってるけどさ(つд`)
http://bugs.mysql.com/bug.php?id=68241
読んでみると意外と面白かっ
たりします
よく知られたところだから、
想定する動作が判るってのが大き
い
\宣伝/
スパスパMySQLやりたい
( ´∀`)y-~~
↑このへんがス
パスパ
本家
• 過去のイベントです。
• http://atnd.org/events/33779
• ハッシュタグなんてあったんですね!? #gdgdmysql
• 参加されている面子的に、煙草飲みには肩身が狭そうな気配。
• 煙草もやめられないけどMySQLもやめられない。
じゃあ作るしかない
というわけでスパスパMySQL
9月上旬にやるつもりです。
参加しても良いよって方は
@yoku0825までメンション下さい。
ご清聴ありがとうございまし
た

More Related Content

More from yoku0825

サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技yoku0825
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことyoku0825
 
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略片手間MySQLチューニング戦略
片手間MySQLチューニング戦略yoku0825
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術yoku0825
 
MySQLステータスモニタリング
MySQLステータスモニタリングMySQLステータスモニタリング
MySQLステータスモニタリングyoku0825
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQLyoku0825
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術yoku0825
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうyoku0825
 
Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験yoku0825
 
MySQLアンチパターン
MySQLアンチパターンMySQLアンチパターン
MySQLアンチパターンyoku0825
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plusyoku0825
 
MySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはMySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはyoku0825
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具yoku0825
 
MHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLMHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLyoku0825
 
5.7の次のMySQL
5.7の次のMySQL5.7の次のMySQL
5.7の次のMySQLyoku0825
 
mikasafabric for MySQL
mikasafabric for MySQLmikasafabric for MySQL
mikasafabric for MySQLyoku0825
 
とあるイルカの近況報告
とあるイルカの近況報告とあるイルカの近況報告
とあるイルカの近況報告yoku0825
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなしyoku0825
 
MySQLと正規形のはなし
MySQLと正規形のはなしMySQLと正規形のはなし
MySQLと正規形のはなしyoku0825
 

More from yoku0825 (20)

サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいこと
 
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略片手間MySQLチューニング戦略
片手間MySQLチューニング戦略
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
 
MySQLステータスモニタリング
MySQLステータスモニタリングMySQLステータスモニタリング
MySQLステータスモニタリング
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQL
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
 
Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験
 
MySQLアンチパターン
MySQLアンチパターンMySQLアンチパターン
MySQLアンチパターン
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plus
 
MySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはMySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLは
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具
 
MHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLMHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQL
 
5.7の次のMySQL
5.7の次のMySQL5.7の次のMySQL
5.7の次のMySQL
 
mikasafabric for MySQL
mikasafabric for MySQLmikasafabric for MySQL
mikasafabric for MySQL
 
とあるイルカの近況報告
とあるイルカの近況報告とあるイルカの近況報告
とあるイルカの近況報告
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなし
 
MySQLと正規形のはなし
MySQLと正規形のはなしMySQLと正規形のはなし
MySQLと正規形のはなし
 

Recently uploaded

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (8)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

チューニンガソン5の復讐