반응형

 

 

 

정축년 설날 아침. 남한산성 내행전 마당에서는 조선의 왕이 명나라를 향하여 올리는 망궐례(望闕禮)가 열렸습니다.

마당에 깔린 멍석 위에 올라 지극한 마음으로 절을 올린 사람들. 때는 조정이 청군에 쫓겨 산성으로 피신한 지 18일째 되던 날이었습니다. 

망월봉 꼭대기에서 그 장면을 지켜보았던 청의 칸 홍타이지의 목소리는 낮게 깔렸습니다.

 

며칠 지나지 않아 청은 갇힌 성을 향해 포를 발사해 행궁을 부수었지요. 

조정은 결국 엿새 뒤 스스로 성문을 열고 나와 청을 향해 무릎을 끓고 이마가 땅에 닿을 듯 머리를 조아리는 삼배구 고두례(三拜九叩頭禮)의 예를 취해야 했습니다.

신흥의 청과 황혼의 명 사이에서 조선은 그렇게 무기력하게 무너져갔습니다.

 

 


...

 


2003년 5월 1일 취임 두 달을 맞은 노무현 대통령은 제가 진행하는 100분 토론에 나와서 당시로서는 가장 뜨거운 질문을 받았습니다.

이라크 파병으로 시끄러웠던 그 때 한 초등학교 선생님은 정부의 이라크 파병을 아이들에게 어떻게 설명해야 하는가를 물었습니다.

한참을 고민한 끝에 나온 대통령의 답이 바로 남한산성 최명길과 김상헌의 대립이었습니다.

강대국을 상대로한 화의와 척화 그 두 개의 노선 가운데 어느 쪽을 택하겠는가는 질문의 형식을 띈 대통령의 답변이었죠.

그로부터 17일 뒤에 미국을 다녀온 노무현 대통령은 자신의 미국관이 바뀐 게 아니냐는 한 학생의 질문에

한발 더 나아가 

 



"한신도 무뢰한의 가랑이 밑을 기었다"

 

 


이런 고사를 인용했습니다.

훗날을 기약하기 위해 지금의 수모는 견딜 수 있다는 고사

듣기에 따라서는 너무나 솔직해서 듣는 사람이 오히려 당황스러운 말이기도 했습니다.

거기에는 어떠한 자기합리화도 없었기 때문입니다.

조선의 왕이든 대한민국의 대통령이든 주변의 강대국들 사이에서 고민하고 또 고민해야 하는 것은 숙명이겠죠.

지지율이 최악이서였는지 미국의 국익을 어느 대통령보다 대놓고 외치는 트럼프와

훗날을 위해서라면 상대의 바짓가랑이 밑을 기어가야 했다는 회한을 남겼던 전직 대통령의 친구 문재인 대통령이 다시 만난 오늘

한반도의 역사는 또 어떻게 흘러갈 것인가

오늘의 앵커브리핑이었습니다.

 

 

https://youtu.be/XQjjK-qFek8

 

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,
반응형

 

"6411번 버스라고 있습니다"

최고위원은 꽃다발 하나 주는데, 당 대표는 세 개씩 주는 이런 불평등과(웃음) 예산 낭비를 근절하겠습니다(웃음과 박수).

6411번 버스라고 있습니다.

서울시 구로구 가로수 공원에서 출발해서 강남을 거쳐서 개포동 주공 2단지까지 대략 2시간 정도 걸리는 노선버스입니다.

내일 아침에도 이 버스는 새벽 4시 정각에 출발합니다.

새벽 4시에 출발하는 그 버스와 4시 5분 경에 출발하는 그 두 번째 버스는 출발한 지 15분만에 신도림과 구로 시장을

거칠 때쯤이면 좌석은 만석이 되고 버스 사이 그 복도 길까지 사람들이 한 명 한 명 바닥에 다 앉는

진풍경이 매일 벌어집니다.

새로운 사람이 타는 일은 거의 없습니다.

매일 같은 사람이 탑니다. 그래서, 시내버스인데도 마치, 고정석이 있는 것처럼 어느 정류소에서 누가 타고, 강남 어느 정류소에서 누가 내리는지, 모두가 알고 있는 매우 특이한 버스입니다.

이 버스에 타시는 분들은 새벽 3시에 일어나서 새벽 5시 반이면, 직장인 강남의 빌딩에 출근을 해야하는 분들입니다.

지하철이 다니지 않는 시각이기 때문에 매일 이 버스를 이용하고 있습니다.

한 분이 어쩌다가 결근을 하면 누가 어디서 안 탔는지 모두가 다 알고 있습니다.

그러나 시간이 좀 흘러서, 아침 출근시간이 되고, 낮에도 이 버스를 이용하는 사람이 있고, 퇴근길에도 이 버스를 이용하는 사람이 있지만, 그 누구도 새벽 4시와 새벽 4시 5분에 출발하는 6411번 버스가 출발점부터 거의 만석이 되어서 강남의 여러 정류장에서 5·60대 아주머니들을 다 내려준 후에 종점으로 향하는지를 아는 사람은 없습니다.

이분들이 아침에 출근하는 직장도 마찬가지입니다. 아들딸과 같은 수많은 직장인들이 그 빌딩을 드나들지만, 그 빌딩에 새벽 5시 반에 출근하는 아주머니들에 의해서, 청소되고 정비되고 있는 줄 의식하는 사람은 없습니다.

이분들은 태어날 때부터 이름이 있었지만, 그 이름으로 불리지 않습니다.

그냥 아주머니입니다. 그냥 청소하는 미화원일 뿐입니다.

한 달에 85만원 받는 이분들이야말로 투명인간입니다.

존재하되, 그 존재를 우리가 느끼지 못하고 함께 살아가는 분들입니다.

지금 현대자동차, 그 고압선 철탑 위에 올라가 있는 비정규직 노동자들도 마찬가지입니다.

스물 세 명씩 죽어나간 쌍용자동차 노동자들도 마찬가지입니다.

저 용산에서, 지금은 몇 년째 허허벌판으로 방치되고 있는 저 남일당 그 건물에서 사라져간

그 다섯 분도 역시 마찬가지 투명인간입니다.

저는 스스로에게 묻습니다.

이들은 아홉시 뉴스도 보지 못하고 일찍 잠자리에 들어야 하는 분들입니다.

그래서 이 분들이 유시민을 모르고, 심상정을 모르고, 이 노회찬을 모를 수도 있습니다.

그러나 그렇다고 해서 이 분들의 삶이 고단하지 않았던 순간이 있었겠습니까. 이분들이 그 어려움 속에서 우리 같은 사람을 찾을 때 우리는 어디에 있었습니까.

그들 눈앞에 있었습니까. 그들의 손이 닿는 곳에 있었습니까. 그들의 소리가 들리는 곳에 과연 있었습니까.

그 누구 탓도 하지 않겠습니다. 오늘 우리가 함께 만들어 나가는 이 진보정당, 대한민국을 실제로 움직여온 수많은 투명인간들을 위해 존재할 때, 그 일말의 의의를 우리는 확인할 수 있을 것입니다.

사실상 그동안 이런 분들에게 우리는 투명정당이나 다름없었습니다. 정치한다고 목소리 높여 외치지만 이분들이 필요로 할 때, 이분들이 손에 닿는 거리에 우리는 없었습니다.

존재했지만 보이지 않는 정당, 투명정당, 그것이 이제까지 대한민국 진보정당의 모습이었습니다.

저는 이제 이분들이 냄새 맡을 수 있고, 손에 잡을 수 있는 곳으로, 이 당을 여러분과 함께 가져가고자 합니다.

여러분 준비되었습니까? (박수)

강물은 아래로 흘러갈수록, 그 폭이 넓어진다고 합니다.

우리의 대중 정당은 달리 이루어지는 것이 아니라 더 낮은 곳으로 내려갈 때 실현될 것입니다, 여러분. (박수)

진보정당의 공동 대표로, 이 부족한 사람을 선출해주신 것에 대해서 무거운 마음으로 수락하고자 합니다.

저는 진보정의당이 존재하는 그 시각까지, 그리고 제가 대표를 맡고 있는 동안, 저의 모든 것을 바쳐서 심상정 후보를 앞장세워 진보적 정권 교체에 성공하고, 그리고 우리가 바라는 모든 투명인간들의 당으로 이 진보정의당을 거듭 세우는데 제가 가진 모든 것을 털어놓겠습니다.

여러분, 함께 합시다, 감사합니다.

 

 

https://youtu.be/tGchg_qlMvs

 

 

참조:

http://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0002457301

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,
반응형

이마트에서 천혜향과 레드향을 팔고 있었는데

가격은 비슷하다.

와이프가 레드향 싸면 좀 사오라고 했지만

예전에 천혜향을 맛있게 먹었던 기억때문에

 

"무슨 레드향을 사~"

 

 

당연히 천혜향이지~  라고 생각하고 천혜향은 한봉지 사고

레드향은 낱개로 몇 개만 샀는데

 

집에 와서 먹어보니


천혜향은 너무 시고..

레드향은 그리고 왜케 맛있어?;

 


뒤에서 누가 욕하는 거 같은데;

 



이번기회에 천혜향과 레드향에 대해 공부 좀 해본다.

 



# 천혜향

 



천애향(?) 천혜양(?) 천혜향(?) 용어를 혼용해서 써서 엄청 헷갈린다.

 


결론은
"향기가 천리를 간다." 뜻에서 천혜향이 맞다.

 


교배 : 감귤 + 오렌지

 

가장 맛있는 시기 : 2월말 ~ 3월

(어쩐지 시더라.. 아직 제철이 아니었다;)

껍질이 얇아서 깔 때 조심해야 한다.

먹었을 때 식감은 지금 말고 예전 기억을 되살려보면..

보통 감귤은 작은 게 맛있고 큰 거는 맛이 덜하다.

근데 천혜향은 작은 감귤의 가장 맛있는 부분이 그대로 가져와서

크기만 커진 것이라서 입안에서 더 큰 만족감을 느낄 수 있었다.


 


# 레드향

 



색깔이 약간 붉은 빛이 돌아서 레드향이라고 이름 붙였나보다.

감귤보다 신맛이 적고 당도가 높다.

교배 : 감귤 + 한라봉


가장 맛있는 시기 : 1월 중순 ~ 2월초
(지금이 제철이구나.. 어쩐지)

껍질이 한라봉 보다는 얇고 표면이 한라봉과 비슷하게 오돌토돌해서 천혜향보다 까기 쉽다.

먹었을 때 식감은 한라봉의 큰 알갱이 톡톡 터지는 재밌는 식감을

그대로 가지고 왔다.

알갱이 씹는 맛이 있고 새콤함은 천혜향에 비해 덜하지만 달달하고

특히 애들이 많이 좋아한다.

개인적으로 한라봉보다 레드향이 더 맛있는 거 같다.

..


애들이 많이 좋아해서 제철 들어가기 전에

이번주에도 레드향 사러 이마트 가야겠다.

 



끝.

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,
반응형

페이코인은 1/6일 금융위원회 산하 금융정보분석원(FIU)이 가상자산 사업자 변경 신고 불수리를 

밝힌 직후 하락세를 이어가고 있었다.

1/10일 오전 7시 40분 빗썸 기준 페이코인 가격은 199원으로, 전고점이었던 410원에 비해 50% 넘게 빠졌다.



급격한 가격 변동에 거래소들도 주시했다. 

업비트·빗썸·코인원·코빗·고팍스 등 국내 5대 거래소로 이뤄진 디지털자산 거래소협의체(닥사, DAXA)는 
FIU 발표 직후 페이코인을 투자 유의 종목으로 지정했다.

유의 종목 지정 사유는 '페이코인 재단의 급격한 사업적 변동'이었다. 
FIU가 이번 불수리에 따라 페이코인을 이용한 결제서비스를 2/5일까지 정리하라고 밝혔기 때문이다.

그리고 실제로 페이코인 결제 서비스는 지난 3일 법원이 페이코인의 집행정지 신청을 각하하면서 

 

전날(5일) 서비스 종료됐다.

종료 후 다시 한번 폭락!

 

지하실로 기어가고 있으니

 

그대로 땅에 뭍어야지 생각하고 있었는데..

 




그런데 이게 뭔일이냐?

페이코인이 서비스 종료에도 불구하고 상장 폐지를 면했다. 

 

업계 예측을 뒤집고 가격은 저점대비 200% 이상 폭등했다.



빗썸과 업비트 등은 6일 오후 7시30분 홈페이지를 통해 "페이코인(PCI)의 유의 종목 지정 기간이 디지털 자산 거래소 공동협의체(DAXA)에 의해 연장됐음을 안내한다"고 밝혔다.

그러면서 "페이코인 측의 사업 대응 계획 관련 자료를 확인했다"며 "이에 따른 소명 이행 여부 및 추가 검토를 위해 유의 종목 지정 기간을 3월31일까지 연장한다"고 덧붙였다.

발표 이후 페이코인의 가격은 50% 넘게 폭등했다. 

그리고 현재 400원 가까이 저점대비 거의 200%이상 올랐다.


업계에서는 페이코인이 상장 폐지 수순을 밟을 것이라는 전망이 나왔다.

하지만 페이코인은 업계 예측을 뒤집고 거래를 이어나가게 됐다. 

이번 연장에 따라 페이코인은 앞으로 50여일 동안 빗썸·코인원 원화마켓과

업비트 비트코인(BTC) 마켓에서 거래가 가능하다.

역시 코인은 어떻게 될지 하늘도 모른다.

 

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,
반응형

 

얼마 전에 아이랑 같이 공연보고 돌아오는 길에

발생한 긴급상황과 해결방법을 공유할까한다.



V500


시동을 켰는데 블랙박스가 

 

무지개처럼 세로 줄이 쭉 나오더니 잠시후 까만화면이 나오면서

 

 


"전방카메라를 사용할 수 없습니다. 시스템을 재시작합니다."

 


무한 부팅되는 현상이 발생했다.

 

(아니 이놈이 갑자기 왜이러나;)

일단 모델넘버를 확인해보니 아이나비 V500 이다.

 

 


음.. 근데 검색하다보니

이 모델은 동일한 현상이 많다는 것을 확인했고 고질적인 문제인 것으로 보였다.

원인은 전방이미지 센서고장이고 햇빛에 오래 노출되면서 발생한 문제라고 한다.

수리를 맡기면 되긴하는데, 당장은 힘들고 임시 대처 방법도 있다고 해서 따라해보았다.

 


1. 메모리카드 포멧


계속 무한부팅되기 때문에 불가능할 꺼라고 생각했는데

전원을 껐다 켜면
3~5초동안은 이놈이 멍때리는 시간이 있다. 

그때 잽싸게 설정에 들어가서 메모리카드 포멧버튼을 누른다.

이걸로 해결되는 경우도 있다고 하는데

난 실패했다. 그래서 패스~



2. 전원이 켜질 때 전방렌즈를 손가락으로 누른다.

 

설마 이게 된다고(?) 따라해 보는데,

전원을 껐다가 다시켤 때 꾹 누르고 나니

 

 

 

신기하게도 처음 무지개 세로 줄이 간 형태로 나왔고

다시 한번 꾹 누르니까 정상화면으로 나왔다 ㅎㅎ

 

 

 

 

 

 

수리완료~!

후기는 사실 여기서 끝이다.

.
.
.

이걸로 해결안되면?

일단 시끄러우니까 블랙박스 선뽑고 안전운전해서 집으로 오자^^;

그리고

 

 

3. 교체

 

사실 2번도 임시대처방법이고 이미지센서를 교환하지 않는 이상

 

무한부팅은 언제든 다시 발생할 수 있다.

 

근데 수리비용이 블랙박스를 새로 사는 가격보다 비싸게 나올 수 있다고 한다.

그래서 수리보다는 새 블랙박스를 사는 게 더 낫다고는 하는데

 

블랙박스는 사는 게 문제가 아니라 설치가 까다로워서 설치비 생각하면 사기가 망설지는 경우가 많다.

 

 

하지만 다행히도 이 제품은 호환되는 모델이 있단다.

 

호환이 된다는 의미는

다시말하면 그냥 고장난 거 떼고 새로 기계만 바꿔끼면 된다는 얘기!

 

 

지금은 A300, A500 있고 가장 최근에 나온건 A700인데 이건 좀비싸다.


그래서 A500으로 알아보니 

 

 

 

 

오호!~

 

 



이 정도면 가격도 합리적이다.

 

블랙박스 A500 본체 (호환 V500 V700 V900 Z500 A100 A300) : Special Car (naver.com)

 

블랙박스 A500 본체 (호환 V500 V700 V900 Z500 A100 A300) : Special Car

[Special Car] 블랙박스,네비게이션,하이패스,자동차용품 전문매장

smartstore.naver.com

 



2017년에 사서 오래썼는데 


몇 번 손꾹~! 으로 해서 안되면

본체 전방카메라만 교체해야겠다.

끝.

 

 

 

#직접 교체 후기는 여기서

 

쇠똥구리 DBA :: 아이나비 V500 수리 / 직접교체 후기 (tistory.com)

 

아이나비 V500 수리 / 직접교체 후기

손꾹~ 은 얼마가지 못했다. (그래도 한 3주는 잘 썼던거 같은데..) 여느 때처럼 시동을 켜니 "전방카메라를 사용할 수 없습니다. 시스템을 재시작합니다." 를 얘기하길래 "하.. 그거 참 쉬지도 않고

dung-beetle.tistory.com

 

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,
반응형

12월에 예매해 놓은 게 벌써 그날이라니..

 

시간 참 빠르긴 하다.

 

반짝반짝 캐치! 티니핑 뮤지컬 때 너무 즐겁게 봐서 그런지

 

이번에도 기대가 많이 된다.

 

우리금융 아트홀 도착!

 

 

날씨가 많이 춥지 않아 다행이다.

 

 

 

 

매표소 가서 티켓팅 먼저 하고 ~

 

 

 

 

잠깐! 주차할인은?

 

 

친절하게(?) 없다고 얘기한다..;

 

다만...!!

 

바로 옆 카페에서 13,000 이상 구매시 주차비 3시간이 무료 라고 한다.

 

 

음 그러면 고민끝에

 

나는 카페라떼 먹고 

와이프는 바닐라라떼

애들은 제주에서 온 청귤 에이드 나눠먹고..

 

결정을 하고 카운터에 갔는데 

 

재고소진으로 마감이란다

 

 

여기는 평일 2시에 마감이라니;

 

사람들 생각이 다 나같았나보다

 

 

사진찍으려고 보니 메인 쪽은 줄이 길어서 이따 찍기로 하고

 

좌석확인 하고

 

 

 

바로 앞에서 간단히 한컷 찍고 공연장으로 ~

 

 

공연장이 저번보다 넓다..

 

 

 

계단을 한참을 내려가야 했다. 후..

 

좀 기다리니 화면이 뭔가 달라진다(?)

 

알쏭달쏭 티니핑들이 한명씩 화면에 나오기 시작하면서

 

애들이 아아핑~ 파티핑 ~ 삐짐핑~ 난리다.ㅎㅎ

 

공연시작!

 

 

커튼콜~

 

 

 

 

애들도 좋아했고  공연도 괜찮았다.

 

다만, 다른 후기들에서도 언급했던 게 맞긴 하다.

 

이전 반짝 반짝 캐치티니핑 뮤지컬 공연보다 노래 자체가 좀 어둡다.

 

로미, 제니의 독백 부분에서도 

 

난 혼자라 외로워 ~♪

 

이런건 애들이 보기엔 좀 쳐지고 별로였다.

 

그리고 빵집오빠들도 반짝 반짝 캐치티니핑에 비해서 비쥬얼이 떨어진다고 

와이프가 얘기한다.

 

(그렇게 따지면 로미 다리는.. 너무 통통한데;)

 

반짝반짝에 비해서 재미가 덜 한 것은 맞지만

 

그래도 캐치티니핑 공연은 다른 뮤지컬에 비해 퀄리티가 있기 때문에

 

이전 공연이 너무 좋아서..

(사실 기대를 너무 많이 했나보다^^;)

 

이번 게 아쉽다는거지 돈이 아까울 정돈아니다.

 

못 찍었던 메인 장소에서 한컷 찍고

 

 

집으로 gogo~

 

알쏭달쏭 캐치! 티니핑 신비한 상자를 열어라 

 

신비한 상자 다 열 줄 알았더니

 

5개 밖에 안 열더라ㅎㅎ

 

끝.

 

 

 

 

 

 

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,
반응형

원래대로라면 15초 내에 종료되었어야 할 프로시저가 1시간이 지나도 끝나지 않고

관련 테이블의 LOCK 까지 발생하여
확인해보니 name_const()로 변환되는 부분에서 문제가 있는 것을 확인하였다.

 

해결과정까지 가는 건 많은 시간이 소요되었지만 결국 답을 찾았고 관련 기록을 정리한다.

 

DB ver: mysql 5.7.1x


1. 장애프로시저 확인

 

CREATE PROCEDURE `xxxx`.`SP_xxxx_LIST`(
in VAR_DATE VARCHAR(20)
)
BEGIN
	DECLARE varMonth varchar(6);
   
	set varMonth = DATE_FORMAT(date_sub(now(),interval +1 MONTH),'%Y%m');
	

	update TB_TEMP_TABLE
	SET RCP_DT = CDP_DT 
	where TG_YYMM = varMonth
	and CAST_CD in ('xxx','xxx')
	and LENGTH(RCP_DT) !=8;

........




2.  원인분석

 

mysql > show full processlist;

/* 프로시저 중간에 이 부분에서 지연이 발생함을 확인함 */

| 591165 | xxxxadm      | 192.168.141.202:49131 | xxxx | Query   |  3638 | Updating                 | update TB_TEMP_TABLE
	SET RCP_DT = CDP_DT 
	where TG_YYMM = NAME_CONST('varMonth',_utf8mb4'202212' COLLATE 'utf8mb4_unicode_ci') 
	and CAST_CD in ('xxx','xxx')
	and LENGTH(RCP_DT) !=8 |    0.000 |



#1. 실행계획 확인

explain
select * from TB_TEMP_TABLE
	where TG_YYMM = NAME_CONST('varMonth',_utf8mb4'202212' COLLATE 'utf8mb4_unicode_ci') 
	and CAST_CD in ('xxx','xxx')
	and LENGTH(RCP_DT) !=8;


#result)
1	SIMPLE	TB_TEMP_TABLE	range	IDX_TEMP_TABLE_06	IDX_TEMP_TABLE_06	18		99890358	Using where

 

IDX_TEMP_TABLE_06은 CAST_CD의 인덱스이다. (TG_YYMM의 인덱스는 IDX_TEMP_TABLE_04)

TB_TEMP_TABLE 테이블은 대용량 파티션 테이블로 약 80GB 정도의 용량을 갖고 있다.
TG_YYMM = '202212' 값이 
내부 함수인 NAME_CONST('varMonth',_utf8mb4'202212' COLLATE 'utf8mb4_unicode_ci')에 
의해 자동으로 묶였는데 이 부분에서 인덱스 사용을 못하고 있다.




#2. 인덱스가 깨졌는지 확인

 

explain
select * from TB_TEMP_TABLE 
where TG_YYMM = '202212' 
and CAST_CD in ('xxx','xxx')
and LENGTH(RCP_DT) !=8;


#result)
1	SIMPLE	TB_TEMP_TABLE	ref	IDX_TEMP_TABLE_04,IDX_TEMP_TABLE_06	IDX_TEMP_TABLE_04	21	const	4752697	Using where



직접 값을 입력했을시 정상적으로 TG_YYMM의 ref 인덱스를 사용하는 것을 확인함, 인덱스는 정상이다.


#3. 실행엔진이 간혹 잘못된 PLAN을 세울수도 있기때문에 인덱스를 강제로 할당테스트

 

explain
select * from TB_TEMP_TABLE force index (IDX_TEMP_TABLE_04)
where TG_YYMM = NAME_CONST('varMonth',_utf8mb4'202212' COLLATE 'utf8mb4_unicode_ci') 
and CAST_CD in ('xxx','xxx')
and LENGTH(RCP_DT) !=8;

#result)
1	SIMPLE	TB_TEMP_TABLE	ALL					198699556	Using where



실행엔진이 문제인가 싶어 force 인덱스로 강제로 주었는데 아에 full scan해서 쿼리가 끝나지 않음

실행엔진이 멍청한 것도 아니다!

 


#4. 확인결과


인덱스는 문제없고 procedure내에서 선언한 varchar 타입인 '202212' 값이 
NAME_CONST() 로 내부함수로 자동변환해서 읽히는데 
이 부분에서 왜 인덱스가 안 타는지 좀 더 확인필요!


 


3. 해결과정

 


일단 name_const() 함수에 대해 알아본다.

#1) name_const 함수란?

NAME_CONST( name , value )
지정된 값을 반환합니다. 결과 집합의 열을 생성 할 때 NAME_CONST() 을 사용하면 지정된 이름이 컬럼에 지정됩니다.
결과 집합 열을 생성하는데 사용하면 NAME_CONST()열이 지정된 이름을 갖게 됩니다. 
인수는 상수여야 합니다.

 

#ex)
mysql> SELECT NAME_CONST('myname', 14);
+--------+
| myname |
+--------+
|     14 |
+--------+
1 row in set (0.00 sec)

같은 의미로 쿼리 안에서 AS 로 컬럼의 닉네임을 거는 것과 동일하다.
mysql> SELECT 14 AS myname;
+--------+
| myname |
+--------+
|     14 |
+--------+
1 row in set (0.00 sec)

 


이 함수는 저장 프로시저를 복제할 때 내부적으로 사용됩니다. 
SQL 문에서 명시적으로 사용하는 것은 거의 의미가 없으며 그렇게 사용해서는 안됩니다.

ex)
SELECT NAME_CONST('myname', 14) 
--> name_const() 함수는 mysql 내부에서 사용하는 것으로 user가 굳이 사용할 필요없다는 것


#name_const() 에서 name은 알겠는데 value는 왜 아래처럼 들어가는 것인가?

_utf8mb4'202212' COLLATE 'utf8mb4_unicode_ci'

#이것도 공식 reference에서 확인가능
https://dev.mysql.com/doc/refman/8.0/en/string-literals.html

#9.1.1 문자열 리터럴

A character string literal may have an optional character set introducer and COLLATE clause, 
to designate it as a string that uses a particular character set and collation:

문자열 리터럴 COLLATE에는 특정 문자 집합과 데이터 정렬을 사용하는 문자열로 지정하기 위해 선택적인 문자 집합 소개자와 절이 있을 수 있습니다.

[_charset_name]'string' [COLLATE collation_name]


ex)
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;

-> mysql에서 사용하는 default form 이 _utf8mb4'some text' COLLATE 인 것을 확인함


#2) DBA 관련 카페 문의
https://cafe.naver.com/prodba
-> name_const() 함수로 인해 성능저하가 있었는지 경험많은 DBA분에게 문의하여

여기서 character set 관련 문제로 이슈를 좁힐 수 있었다.


#3) 구글링

비슷한 상황의 질의를 찾았고 해결가능한 힌트를 찾게됨


#MySQL Character Set & Select Query Performance in stored procedure
https://stackoverflow.com/questions/71771201/mysql-character-set-select-query-performance-in-stored-procedure

 

#question)
Recently I noticed few queries are taking very long time in execution, 
checked further and found that MySQL Optimizer is trying to use COLLATE in Where clause 
and that's causing performance issue, if I run below query without COLLATE then getting quick response from database:

최근 몇 가지 쿼리가 실행에 매우 오랜 시간이 걸리는 것을 확인하고 추가로 확인한 결과 
MySQL Optimizer가 Where절에서 COLLATE를 사용하려고 시도하고 있으며 
COLLATE 없이 쿼리 아래에서 실행하면 데이터베이스에서 빠른 응답을 받으면 성능 문제가 

발생한다는 것을 발견했습니다.

SELECT notification_id FROM notification  
WHERE ref_table = 2 
AND ref_id =  NAME_CONST('v_wall_detail_id',_utf8mb4'c37e32fc-b3b5-11ec-befc-02447a44a47c' COLLATE 'utf8mb4_unicode_ci')

 

 

..

Any suggestion, what improvements are needed to make my queries faster?
쿼리 속도를 높이려면 어떤 개선이 필요합니까?

 

#answer)
The table's character set is utf8, so I guess its collation is one of utf8_general_ci or utf8_unicode_ci. 
테이블의 문자 집합이 utf8이므로 데이터 정렬이 utf8_general_ci 또는 utf8_unicode_ci 중 하나인 것 같습니다.

You can check this way:
다음과 같이 확인할 수 있습니다.

 

SELECT collation_name from INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = '...your schema...' AND table_name = 'notification'
AND column_name = 'ref_id';


You are forcing it to compare to a string with a utf8mb4 charset and collation

An index is a sorted data structure, and the sort order depends on the collation of the column. 
Using that index means taking advantage of the sort order to look up values rapidly, without examining every row.

When you compared the column to a string with a different collation, MySQL cannot infer that the sort order or string equivalence of your UUID constant is compatible. 
So it must do string comparison the hard way, row by row.

This is not a bug, this is the intended way for collations to work. 
To take advantage of the index, you must compare to a string with a compatible collation. 

utf8mb4 문자 세트 및 데이터 정렬이 있는 문자열과 비교하도록 강제하고 있습니다. 
인덱스는 정렬된 데이터 구조이며 정렬 순서는 열의 데이터 정렬에 따라 다릅니다. 
해당 인덱스를 사용한다는 것은 정렬 순서를 활용하여 모든 행을 검사하지 않고 빠르게 값을 조회한다는 의미입니다.

열을 데이터 정렬이 다른 문자열과 비교할 때 MySQL은 정렬 순서 또는 UUID 상수의 문자열 등가가 호환 가능하다고 추론할 수 없습니다. 
따라서 문자열 비교를 row 단위의 어려운 방식으로 수행해야 합니다.

이것은 버그가 아니며 데이터 정렬이 작동하도록 의도된 방식입니다. 
인덱스를 활용하려면 호환되는 데이터 정렬이 있는 문자열과 비교해야 합니다.

 

 


# 1) mysql 의 default character set , cllation 확인 (my.cnf 설정)

 

mysql> show global variables like '%coll%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_unicode_ci |
| collation_database   | utf8mb4_unicode_ci |
| collation_server     | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)


mysql> show global variables like '%char%';
+--------------------------+----------------------------------------------------------+
| Variable_name            | Value                                                    |
+--------------------------+----------------------------------------------------------+
| character_set_client     | utf8mb4                                                  |
| character_set_connection | utf8mb4                                                  |
| character_set_database   | utf8mb4                                                  |
| character_set_filesystem | binary                                                   |
| character_set_results    | utf8mb4                                                  |
| character_set_server     | utf8mb4                                                  |
| character_set_system     | utf8                                                     ||
+--------------------------+----------------------------------------------------------+
8 rows in set (0.00 sec)

 

 

#2) 컬럼 타입 확인

 

SELECT
CHARACTER_SET_NAME
,COLLATION_NAME 
FROM INFORMATION_SCHEMA.`COLUMNS`  
WHERE TABLE_NAME = 'TB_TEMP_TABLE'
and COLUMN_NAME = 'TG_YYMM';


----------------------------
utf8  |   utf8_general_ci  |
----------------------------

 

 

빙고!

 



4. 해결

 



원인은 TG_YYMM 컬럼은 character set  = utf8이고

mysql 의 my.cnf / default character set = utf8mb4 이 차이가 있어서 발생하였다.

프로시저 내에서 선언한 varMonth varchar(6)은 당연히 mysql default 케릭터셋인 utf8mb4 를 쓰고 있다.

where 절에서

utf8 = utf8mb4 를 비교하니 

mysql에서 

야! varMonth  변수 이거 utf8 아니고 utf8mb4 이야 ."라고 

name_const() 함수를 통해 알려주고 있었고 

 

"이러면 인덱스 못쓴다.!" 라고 

show processlist를 통해 한번 더 알려주고 있었는데

의미를 제대로 알지 못함..^^;




#수정방법은 2가지고 성능은 1번이 조금 더 좋다.

(내부 함수라도 함수를 한번 덜써서 그런것으로 보임)

1) varMonth 선언할 때 TG_YYMM 컬럼과 동일한 character set 으로 변경

 

/* DECLARE varMonth varchar(6) 를 아래처럼 utf8로 명시적으로 선언*/
DECLARE varMonth varchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci; 


#log)

mysql> show full processlist;

update TB_TEMP_TABLE
SET RCP_DT = CDP_DT 
where TG_YYMM =  NAME_CONST('varMonth',_utf8'202212' COLLATE 'utf8_general_ci')
and CAST_CD in ('xxx','xxx')
and LENGTH(RCP_DT) !=8;

 

 

#실행계획


-> NAME_CONST()를 쓰지만 동일한 utf8이기 때문에 ref 인덱스 스캔을 한다.



2) query 문 안에서 수정

 

update TB_TEMP_TABLE
SET RCP_DT = CDP_DT 
where TG_YYMM = CONVERT(varMonth USING utf8)
and CAST_CD in ('xxx','xxx')
and LENGTH(RCP_DT) !=8;


#log)

mysql> show full processlist;

update TB_TEMP_TABLE
SET RCP_DT = CDP_DT 
where TG_YYMM = CONVERT( NAME_CONST('varMonth',_utf8mb4'202212' COLLATE 'utf8mb4_unicode_ci') USING utf8)
and CAST_CD in ('xxx','xxx')
and LENGTH(RCP_DT) !=8

 

 

#실행계획


-> NAME_CONST( _utf8mb4 를 쓰지만 다시 convert 함수로 utf8로 변경해서 결국 ref 인덱스 스캔이 된다.

 


끝.

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,
반응형

티니핑김이 나왔나고 하는데?

 

믿먹 저염도 남해산 원초 도시락김!🫶🏻
36종 랜덤으로 들어간 깜찍심한
티니핑 랜티큘러칩도 캐치 캐치💫💗


티니핑김

 

티니핑랜티큘러칩

 





티니핑 덕후 아빠로서 이런 것 또 그냥 지나칠 수가 없지!

티니핑김을 구해볼까 했더니

집근처 GS 편의점에는 없고..

회사근처 10군대를 돌고돌아 겨우 3개를 구했다.

가격은 1봉지에 3개씩 들어있고 2,200원 

많이 비싸네;



뭐 그래도 아이가 좋아할 걸 생각하니 

후훗..



티니티니티니핑~ 매일매일 설래요
알쏭달쏭티니핑 널만나 행운이야~ ♬

콧노래가 절로 나오는 퇴근길

 

 

 



집에 돌아와서 보여주니 엄청나게 좋아하는 아이..ㅎㅎ

근데 밥을 먹었다고 해서
티니핑 랜티큘러칩 만 먼저 개봉해보기로 했다.

 

랜티큘러?

이건 발음하기도 힘들다

 

#Lenticular
사전적인 의미는 '수정체'나 '양면 볼록렌즈'이며, 일반적으로 렌티큘러라고 하면 가늘고 긴 원통형 볼록 렌즈를 나열하여 보는

각도에 따라 다른 이미지가 보이도록 만든 것을 의미한다.

 

좌우로 움직이면 그림이 변하는 카드를 랜티큘러라고 하나보다.

 

 

암튼 아이가 3봉지 전부 뜯었는데 아쉽게도 하츄핑은 안나왔다.

 

아이는 랜티큘러칩만 가지고 가서 놀고 있고

아이는 이미 저녁을 먹어서 의도치않게 첫 시식을 
내가 하게 되었는데 ..

 

잴 맛있어보이는 얌얌핑으로 선택!

 

 

 

 

 

일단 크기는 일반 조미김보다 조금 작고
갯수는 8장으로 동일하다.

 

 

 

 

그리고 애들 먹을 거니까 성분도 좀 살펴보면

 

 

국내산 55.91%

 

음 .. 다른 시중김(보통 50~53%) 보다 함유량이 조금 높긴하다.


맛도 그럭저럭 괜찮다.

 

 

다만 조미김을 여러가지 사보고 먹어본
경험으로 등급을 매겨본다면..

 

티니핑김 맛 평가는 중간정도!

 

 

좀 더 구체적으로 예를 들면

 

광천김=양반김 < 티니핑김 < 비비고김=광천파래김 < 해비토김

 

이정도?

 

(지극히 개인적인 평가이지만 ^^;)

아래는 그렇게 생각하는 이유에 대해 간략하게 적었다.

 

 

1) 해비토김

 


예전 한정식집에서 애들이 먹을 게 없어서 김을 좀 달라고 했더니
거기서 줬던 김으로 맛이 너무 좋아서 애들이 밥을 한그릇 더 먹었던 걸로 기억하고 있다.

 

 


2) 비비고김/광천파래김

 

 



원래 비비고김이었는데 지금은 CJ 명가로 이름을 바꾼거 같다.
비비고에서 만든 김은 확실히 맛있다

광천파래김도 파래가 들어가서 그런지 좀 더 부드럽게 넘어가서 괜찮다

 

 


3등 티니핑김

괜찮긴한데 맛있어서 애들이 밥을 술술 넘길 정도는 아니다.
비비고 김보다 맛이 떨어지는 건 가격대비 좀 아쉽다.

 

 

 


4등 광천김=양반김

 

 


그냥 흔하게 먹는 일반 조미김맛

 

 

 

 



티니핑김 맛은 그렇게 좋지도 나쁘지도 않은 정도라고 본다.

다만 가격대비 가성비를 생각하면 한번 사먹어 본걸로 만족하려고 한다.

 

끝.

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,