전체 글 327

[MySQL] SELECT INSERT 쿼리 에서 DEADLOCK 발생

최근에 로그를 살펴보다가 발견한 Deadlock SQL로그. SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction at ... 가장 최근의 deadlock 히스토리를 살펴본다. (가장 최근 히스토리만 저장되고 이전 내역들은 저장되지 않는다) SHOW ENGINE INNODB STATUS ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2023-02-22 11:37:50 0x7fe8106ae700 *** (1) TRANSACTION: TRANSACTION 107458378, A..

Mysql 2023.02.22

[Redis] 성능테스트 redis-benchmark

Redis가 기본적으로 제공하는 성능테스트 기능 //redis 설치경로 // 기본 10만회씩 SET/GET/SADD 등등 기본명령어 테스트 $ /usr/local/bin/redis-benchmark -p 6379 // -n 옵션으로 횟수 설정 가능(default 10만회) $ /usr/local/bin/redis-benchmark -p 6379 -n 결과 ====== PING_INLINE ====== 100000 requests completed in 0.93 seconds 50 parallel clients 3 bytes payload keep alive: 1 multi-thread: no Latency by percentile distribution: 0.000%

Redis 2023.02.14

[GIT] git push --force 오류

서버에 로컬브랜치를 강제 업데이트 할때 git push --force 를 사용하는데, 이 때 아래와 같은 오류가 난다면 $ git push --force fatal: The current branch master has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin master 아래와 같이 해결 $ git push origin +master Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 To https://github.com/my.git + e6f792f46...ef4679889 master -> ma..

Git 2023.02.10

[Laravel] Console Command Argument 옵션

protected $signature = 'order:check {param?*}'; 필수 인수 protected $signature = 'order:check {param}'; 선택적 인수 protected $signature = 'order:check {param?}'; 기본값이 있는 선택적 인수 protected $signature = 'order:check {param=foo}'; 여러개의 값을 배열로 받기 (값 필수) protected $signature = 'order:check {param*}'; 여러개의 값을 선택적으로 배열로 받기 (빈값 허용) protected $signature = 'order:check {param?*}'; 배열 받을때 사용 예 $param = $this->argum..

Laravel 2023.01.03

[PHP] timestamp 로 밀리세컨즈 13자리 만들기

시간 비교시, 초 보다는 밀리세컨즈 단위로 비교하는 것이 보다 정확하기 때문에 13자리 또는 16자리(백만분의1초) 타임스탬프를 생성하여 비교하면 유용함. list($microtime, $timestamp) = explode(' ',microtime()); // 밀리세컨즈 (13자리) $time = $timestamp . substr($microtime, 2, 3); // 100만 분의 1 microtime 추가 (16자리) $time = $timestamp . substr($microtime, 2, 6);

PHP 2022.12.20

[Laravel] From Subquery 작성방법

Laravel 5.6 이상부터 fromSub() 사용 DB::query()->fromSub(function($q){ $q->from('table')->groupBy('name'); }, 'a')->select('a.id', 'a.name'); 위 쿼리는 아래와 동일한 SQL임 select a.id, a.name from (select * from 'table' group by 'name') as 'a' 또는 아래와 같이 사용 가능 쿼리빌더의 getQuery를 사용하여 작성. // Users Model 내 작성 public function getUsersListSubQuery() { return $this->select('id', 'name') ->leftjoin(...) ->where(...) ->gro..

Laravel 2022.12.13

[DB] 대용량 DB 무중단 배포 툴

대용량 데이터를 보유중인 테이블의 스키마 변경이 필요할 때 무중단, non-blocking 상태로 테이블 변경을 할 수 있게 도와주는 툴. pt-online-schema-change https://jojoldu.tistory.com/358 [mysql] Percona pt-online-schema-change 설치 및 사용하기 Mysql에서 몇억건 이상의 대량의 데이터를 갖고 있는 테이블을 수정 하는것은 쉬운일이 아닙니다. 단순히 alter table 을 해버리면 4시간, 5시간 이상 수행되기 떄문인데요. 이를 해결 하기 위해 create jojoldu.tistory.com

Mysql 2022.05.31

[Laravel] updateOrInsert

데이터가 존재하면 Update, 없으면 Insert 하는 기능 DB::table('users') ->updateOrInsert( ['email' => 'john@example.com', 'name' => 'John'], //조건 ['votes' => '2'] //update 또는 insert 데이터 ); email 과 name 이 조건과 일치하는 데이터가 존재할경우, votes를 업데이트한다. 데이터가 없을경우 새로 insert 한다. 주의 : Eloquent ORM 사용시 timestamp가 설정되어 있더라도 created_at, updated_at 자동적용 안됨 Laravel 8+ 부터는 upsert 메소드 생김 여러행의 row를 삽입 가능 DB::table('flights')->upsert([ ['..

Laravel 2022.04.06
반응형