SQL • リレーショナルデータベースシステムと会話するための言語 • 1970年 Codd が RDB モデルと同時に提案 (Alpha言語) • 1974年 Chamberlin と Boyce が改良 • 元々は SEQUEL (Structured English Query Language) だったが、商標登録されていた • 読み方は エスキューエル とそのまま読む (Glliespie 2012)
概要 当時数ヶ月間誰も原因がわからなかった一時的にRDSの負荷(CPU使用率)がスパイクする現象の原因を調査できる環境を整えて、原因分析〜改善まで実施したときの話です。 1つ1つの取り組み自体は大きなことはやっていませんが、一連の動きで得られたものも多かったのでアウトプットしようと思い記事にまとめました。 取り組んだ課題 原因を特定するためのツールがない そもそも何が原因でRDSのCPU負荷が高まっているのかを調べるための情報がCPU使用率以外に全くない状況でした。 そこでRDSの負荷原因を探る方法を調べると、Performance InsightsやCloudWatch Logsへのスロークエリログ出力を使う記事をいくつか見つけたのでこの2つについて調べることにしました。 Performance Insights データベース負荷をSQLなどの単位で時系列で可視化したり、トップSQLやD
Goにおけるデータベース操作とテスト Goでデータベースを操作する際には、標準パッケージであるdatabase/sql、GORM、entなどの様々な選択肢が存在します。多くのライブラリではGoのコードを定義してSQLを生成しますが、sqlcはSQLをコンパイルしてGoのコードを生成するのが特徴のライブラリです。 このアプローチには、最終的に実行されるSQLが明らかであることやデータベースとやりとりするためのデータ構造を自分で定義する必要がないことといったメリットがあります。また、コンパイル時にSQLを解析し型や引数名の間違いを検出できます。そしてなにより、非常にシンプルです。 本記事では、sqlcの一歩進んだ使い方としてdockertestと組み合わせたテストの書き方について紹介します。dockertestとは、Dockerコンテナを立ち上げてテストを実行するための使いやすいコマンドを提供
あなたが知らない既存機能があるかもしれません! マイクロソフト社は2006年、Microsoft Officeの新バージョンで追加してほしい機能について、顧客調査を実施しました。驚いたことに、ユーザが希望した機能の90%以上はすでに実装されており、その存在が知られていないだけであることが判明しました。機能の「見つけにくさ」の問題の解決策として同社が考案したのが、現在のMicrosoft Office製品でおなじみの「リボンUI」です。 この問題はOfficeに限ったものではありません。日々使用するツールの機能をすべて把握している人はほとんどいません。PostgreSQLのように大規模なツールであればなおさらです。数週間前にPostgreSQL 14がリリースされたばかりなので、この機会にPostgreSQLのあまり知られていない機能に注目してみたいと思います。 この記事では、Postgre
TypesafetyPgtyped generates TS types for parameters and results of SQL queries of any complexity. Parse SQL and TS filesQueries can be written in SQL files together with useful parameter annotations. In Typescript files, queries can be defined using a sql template string literal. Prevent SQL injectionsPgTyped prevents SQL injections by separately sending queries and parameters to the DB for execut
※本記事は筆者styprが英語で執筆した記事を株式会社Flatt Security社内で日本語に翻訳したものになります。 TL;DR Node.jsのエコシステムで最も人気のあるMySQLパッケージの一つである mysqljs/mysql (https://github.com/mysqljs/mysql)において、クエリのエスケープ関数の予期せぬ動作がSQLインジェクションを引き起こす可能性があることが判明しました。 通常、クエリのエスケープ関数やプレースホルダはSQLインジェクションを防ぐことが知られています。しかし、mysqljs/mysql は、値の種類によってエスケープ方法が異なることが知られており、攻撃者が異なる値の種類でパラメータを渡すと、最終的に予期せぬ動作を引き起こす可能性があります。予期せぬ動作とは、バグのような動作やSQLインジェクションなどです。 ほぼすべてのオンラ
こんにちは、freee Developers Advent Calendar 2021、19日目のid:shallow1729です。昨日はtdtdsさんで【マジで】サイバー演習シナリオの作り方【怖い】でした!障害訓練後に攻撃方法を解説された時はリアリティの高さに驚きました。 僕はMySQLを使っていて発生した不思議な挙動の調査の話をしようと思います。 今回問題となったクエリ 今回話題にするクエリは以下のようなシンプルなものです。 SELECT * FROM hoge WHERE id IN (...) MySQLのパラメーター次第ですが、デフォルトの設定だとこのIN句の中の値の数が数万になると適切なインデックスが用意されていてもフルスキャンが発生する事がありました。このクエリがテーブルのほとんどのレコードを網羅するような場合や高速でレコードを大量にinsertして統計情報が追いつかないケー
こんにちは。DevOps芸人と化して久しいAndyです。 2020年の秋にTypeScript 4.1へTemplate Literal Typesが導入され、そのインパクトに俄かに一部の界隈がザワついたのは記憶に新しいかと思います。 今回は型プログラミングの可能性を大いに押し広げたTemplate Literal Typesを用いてSQL文を型レベルで解析し、その実行結果を型情報として導出するためのsqlptureというライブラリを作ったので紹介します。 Embedded content: https://github.com/andoshin11/sqlpture SQLの実行/検証対象はPostgreSQL v13です。 tl;dr SQL文を型レベルで解析・評価して返り値型を取得できるmini interpreterを作ったよ 型レベルのSQL validatorも作ってるよ 実際
Google、ORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応 SQL文を直接書かなくとも、自動的にSQL文を生成、実行してくれるORM(Object-Relational Mapper)は、プログラミングを容易にしてくれる技術としてRailsやHibernate、Springなどさまざまなフレームワークなどで活用されています。 一方で、ORMが生成するSQL文はときに複雑に、あるいは非効率なものとなり、データベース処理の遅さにつながることもあります。 このとき、SQL文の生成と実行を明示的にコードとして記述する必要がないというORMの特徴が、なぜデータベース処理が遅くなったのか、どのようなSQL文が生成され、そのどこに原因があるのか、といった調査を難しくている面があり
AWSはNoSQLデータベースサービスのDynamoDBが、SQLで操作可能になるSQL互換のクエリ言語「PartiQL」に対応したことを発表しました。 You now can use PartiQL (a SQL-compatible query language) to query, insert, update & delete table data in DynamoDB. PartiQL makes it easier for you to interact with DynamoDB & run queries in the AWS Management Console. https://t.co/qlRwzYZCPC pic.twitter.com/pVaX5xlEDu — DynamoDB (@dynamodb) November 23, 2020 DynamoDBはキーバ
概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: avoid OR for better PostgreSQL query performance - Cybertec 原文公開日: 2018/05/07 著者: Laurenz Albe サイト: CYBERTEC -- データサイエンス分野でのPostgreSQLサポートやコンサルティングを行っている企業です ※挿絵は原著者自らによるものです。 生きるべきか『OR』死すべきか、それが問題だ」 「帰れ!」「非効率!」「同義反復!」 © Laurenz Albe 2018PostgreSQLクエリのチューニングは私たちCybertecの日常的な業務ですが、チューニング中にクエリにORを1つでも見つけた瞬間、恐ろしさに身の毛もよだつ思いがします。たいていの場合、ORはクエリのパフォーマンス低下の原因となるからです。 言うまでもないこ
年末ですね。カヤックでは360度評価の時期でもあるので、みんな振り返りだとか内省などの言葉がいたるところで飛んでいます。この記事でも今年の出来事を振り返りしてみたいと思います。どうも、ソーシャルゲーム事業部ゲーム技研の谷脇です。 この記事はTech KAYAC Advent Calendar 2019 Migration Trackの20日目の記事です。19日目はAWS Lambda Node.js runtime の EoL に疲れたので Go にしていっている話でした。 この記事のあらまし あるWebサービスを作るプロジェクトでORMを切り替えた 開発言語はGo言語 DBライブラリ/ORMはgithub.com/xo/xoを使っていました ですが開発途中から、私が作成したライブラリであるgithub.com/mackee/go-sqllaに乗り換えました どっちもコード生成系だけれど、
概要 Ruby on Rails, CakePHP, LaravelといったWebアプリケーションフレームワークには標準でデータベースマイグレーションツールが包含されている。 一方でデータベースマイグレーションをwebアプリケーションと別に管理したいケースもある。別に管理するためにはフレームワークに包含されているツールよりも、スタンドアロンで利用可能なツールの方が良い。本記事ではスタンドアロンで利用可能なデータベースマイグレーションツールを比較してみる。 データベースマイグレーションとは何か データベースマイグレーションはRDBMSのdatabase・スキーマ定義をコード化し、テーブル・インデックス更新を自動化することである。主に下記を実施することができる。 databaseの作成 テーブルの作成・更新 インデックスの作成・更新 DBスキーマのバージョン管理(過去に実行されたSQLが特定の
Amazon Web Services(以下AWS)は、SQL互換の新しい問い合わせ言語およびそのリファレンス実装である「PartiQL」をオープンソースとして公開したことを発表しました。 PartiQLはSQL互換の構文に最小限の拡張を施すことで、リレーショナル形式のデータベースだけでなく、KVSやJSONなどを含むNoSQLデータベースやCSVファイルなど、さまざまなデータソースに対して横断的に検索できる問い合わせ言語およびそのリファレンス実装です。 下記はPartiQLを発表したブログからの引用です。 Today we are happy to announce PartiQL, a SQL-compatible query language that makes it easy to efficiently query data, regardless of where or in
仕事やらなんやらでMySQLのクエリの良し悪しを判断する必要があるとき、EXPLAINの内容だけだとどのぐらい良くなったり悪くなったのか分からないので SET long_query_time = 0; してrows_examined (そのクエリでrows_sent行の結果を返すために何行に触ったのか)も一緒に提示するようにしている(少なくともMySQL 5.7時点ではrows_examinedはslow_query_logでしか確認できないはずperformance_schemaが有効ならevents_statements_historyやその仲間たちで確認できるとのこと*1 MySQL :: MySQL 5.6 リファレンスマニュアル :: 22.9.6 パフォーマンススキーマステートメントイベントテーブル)。 例: 上の例のBeforeは、もともとDBAが書いた温かみのあるSQLでO
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く